X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=README;h=2fae654de9a0aac1bf4e5ea83eebb70656757283;hb=dd052bd346ddd497ed79f771ea1d5b3406bbcf07;hp=d47e5df9465070010a15797671ed48195dcf0628;hpb=6991f61a6a02d95a4275bcc90aa9bb7037a9e69e;p=urcu.git diff --git a/README b/README index d47e5df..2fae654 100644 --- a/README +++ b/README @@ -1,11 +1,51 @@ -build instructions for userspace-rcu library : +Userspace RCU Implementatation +by Mathieu Desnoyers and Paul E. McKenney -make pthreads-x86 -or -make pthreads-ppc +BUILDING +-------- -make -make install + make + make install + +QUICK START GUIDE +----------------- + +Initialization + + Each thread that has reader critical sections (that uses + rcu_read_lock()/rcu_read_unlock() must first register to the URCU + library. This is done by calling rcu_register_thread(). + +Reading + + Reader critical sections must be protected by locating them between + calls to rcu_read_lock() and rcu_read_unlock(). Inside that lock, + rcu_dereference() may be called to read an RCU protected pointer. + +Writing + + rcu_assign_pointer() and rcu_xchg_pointer() may be called anywhere. + After, synchronize_rcu() must be called. When it returns, the old + values are not in usage anymore. + +Being careful with signals + + The library uses signals internally. The signal handler is + registered with the SA_RESTART flag. However, these signals may cause + some non-restartable system calls to fail with errno = EINTR. Care + should be taken to restart system calls manually if they fail with this + error. A list of non-restartable system calls may be found in + signal(7). + +Usage of DEBUG_FULL_MB + + DEBUG_FULL_MB uses full SMP barriers for readers. This eliminates the + need for signals but results in slower reads. + + +Usage of DEBUG_YIELD + + DEBUG_YIELD is used to add random delays in the code for testing + purposes. - Mathieu Desnoyers