<?xml version="1.0"?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
               "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
<!ENTITY igraph "igraph">
]>

<section id="using-igraph-in-multi-threaded-programs"><title>Using igraph in multi-threaded programs</title>
<para>
  The igraph library is considered thread-safe if it has been compiled
  with thread-local storage enabled, i.e. the <literal>IGRAPH_ENABLE_TLS</literal>
  setting was toggled to <literal>ON</literal> and the current platform
  supports this feature. To check whether an igraph build is thread-safe, use the
  <link linkend="IGRAPH_THREAD_SAFE">
    <function>IGRAPH_THREAD_SAFE</function>
  </link>
  macro. When linking to external versions of igraph's dependencies, it is
  the responsibility of the user to check that these dependencies were also
  compiled to be thread-safe.
</para>

<!-- doxrox-include IGRAPH_THREAD_SAFE -->

<section id="thread-safe-arpack-library"><title>Thread-safe ARPACK library</title>
<para>
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.
</para>
</section>

<section id="thread-safe-rng"><title>Thread-safety of random number generators</title>
<para>
The default random number generator that igraph uses is <emphasis>not</emphasis>
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.
</para>
</section>


</section>
