Allow taking address of rcu_read_lock() and rcu_read_unlock()
[urcu.git] / README
diff --git a/README b/README
index 10406f79f9b33b797e794ca463d97a5c7cf0378f..659511f7c46eba7260e1297ae247efceaa88b7bf 100644 (file)
--- a/README
+++ b/README
@@ -190,3 +190,24 @@ SMP support
                ./configure --disable-smp-support
 
        theoretically yielding slightly better performance.
+
+Interaction with fork()
+
+       Special care must be taken for applications performing fork() without
+       any following exec(). This is caused by the fact that Linux only clones
+       the thread calling fork(), and thus never replicates any of the other
+       parent thread into the child process. Most liburcu implementations
+       require that all registrations (as reader, defer_rcu and call_rcu
+       threads) should be released before a fork() is performed, except for the
+       rather common scenario where fork() is immediately followed by exec() in
+       the child process. The only implementation not subject to that rule is
+       liburcu-bp, which is designed to handle fork() by calling
+       rcu_bp_before_fork, rcu_bp_after_fork_parent and
+       rcu_bp_after_fork_child.
+
+       Applications that use call_rcu() and that fork() without
+       doing an immediate exec() must take special action.  The parent
+       must invoke call_rcu_before_fork() before the fork() and
+       call_rcu_after_fork_parent() after the fork().  The child
+       process must invoke call_rcu_after_fork_child().
+       These three APIs are suitable for passing to pthread_atfork().
This page took 0.022484 seconds and 4 git commands to generate.