1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
<?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 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
<link linkend="IGRAPH_THREAD_SAFE">
<function>IGRAPH_THREAD_SAFE</function>
</link> macro.
</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>
|