# Using igraph in multi-threaded programs

The igraph library is considered thread-safe on platforms that support thread-local storage. This currently includes Linux and MS Windows operating systems, but not Mac OSX. The best way to check whether an igraph build is thread-safe is checking the `IGRAPH_THREAD_SAFE` macro.

## Thread-safe ARPACK library

Note that igraph is only thread-safe if it was built with the internal ARPACK library, i.e. the one that comes with igraph. The standard ARPACK library is not thread-safe.

## Thread-safety of random number generators

The default random number generator that igraph uses is not guaranteed to be thread-safe. You need to set a different random number generator instance for every thread that you want to use igraph from. This is especially important if you set the seed of the random number generator to ensure reproducibility; sharing a random number generator between threads would break reproducibility as the order in which the various threads are scheduled is random, and therefore they would still receive random numbers in an unpredictable order from the shared random number generator.