-----------------------
Currently, Linux x86 (i386, i486, i586, i686), x86 64-bit, PowerPC 32/64,
-S390, S390x, ARM, Alpha, ia64 and Sparcv9 32/64 are supported. Tested on
-Linux, FreeBSD 8.2/9.0, and Cygwin. Should also work on: Android, NetBSD 5,
-OpenBSD, Darwin (more testing needed before claiming support for these OS).
+S390, S390x, ARM, MIPS, Alpha, ia64 and Sparcv9 32/64 are supported.
+Tested on Linux, FreeBSD 8.2/8.3/9.0/9.1/10.0 i386/amd64, and Cygwin.
+Should also work on: Android, NetBSD 5, OpenBSD, Darwin (more testing
+needed before claiming support for these OS).
Linux ARM depends on running a Linux kernel 2.6.15 or better, GCC 4.4 or
better.
support. For ARM this was introduced with gcc 4.4:
http://gcc.gnu.org/gcc-4.4/changes.html
+Clang version 3.0 (based on LLVM 3.0) is supported.
+
+Building on MacOS X (Darwin) requires a work-around for processor
+detection:
+ # 32-bit
+ ./configure --build=i686-apple-darwin11
+ # 64-bit
+ ./configure --build=x86_64-apple-darwin11
+
For developers using the git tree:
This source tree is based on the autotools suite from GNU to simplify
See the relevant API documentation files in doc/. The APIs provided by
Userspace RCU are, by prefix:
-- rcu_ : Read-Copy Update
+- rcu_ : Read-Copy Update (see doc/rcu-api.txt)
- cmm_ : Concurrent Memory Model
- caa_ : Concurrent Architecture Abstraction
-- cds_ : Concurrent Data Structures
-- uatomic_: Userspace Atomic
+- cds_ : Concurrent Data Structures (see doc/cds-api.txt)
+- uatomic_: Userspace Atomic (see doc/uatomic-api.txt)
QUICK START GUIDE
instead of inlines, so your application can link with the library.
* Linking with one of the libraries below is always necessary even for
LGPL and GPL applications.
+ * Define URCU_INLINE_SMALL_FUNCTIONS before including Userspace RCU
+ headers if you want Userspace RCU to inline small functions (10
+ lines or less) into the application. It can be used by applications
+ distributed under any kind of license, and does *not* make the
+ application a derived work of Userspace RCU.
+
+ Those small inlined functions are guaranteed to match the library
+ content as long as the library major version is unchanged.
+ Therefore, the application *must* be compiled with headers matching
+ the library major version number. Applications using
+ URCU_INLINE_SMALL_FUNCTIONS may be unable to use debugging
+ features of Userspace RCU without being recompiled.
+
Usage of liburcu
should only be taken when the RCU reader thread is "offline"
(this can be performed by calling rcu_thread_offline()).
-Usage of DEBUG_RCU
-
- DEBUG_RCU is used to add internal debugging self-checks to the
- RCU library. This define adds a performance penalty when enabled.
- Can be enabled by uncommenting the corresponding line in
- Makefile.build.inc.
-
-Usage of DEBUG_YIELD
-
- DEBUG_YIELD is used to add random delays in the code for testing
- purposes.
-
-SMP support
-
- By default the library is configured to use synchronization primitives
- adequate for SMP systems. On uniprocessor systems, support for SMP
- systems can be disabled with:
-
- ./configure --disable-smp-support
-
- theoretically yielding slightly better performance.
-
Interaction with fork()
Special care must be taken for applications performing fork() without
TLS variables on systems where it is not available. This behavior
can be forced by specifying --disable-compiler-tls as configure
argument.
+
+Usage of DEBUG_RCU
+
+ DEBUG_RCU is used to add internal debugging self-checks to the
+ RCU library. This define adds a performance penalty when enabled.
+ Can be enabled by uncommenting the corresponding line in
+ Makefile.build.inc.
+
+Usage of DEBUG_YIELD
+
+ DEBUG_YIELD is used to add random delays in the code for testing
+ purposes.
+
+SMP support
+
+ By default the library is configured to use synchronization primitives
+ adequate for SMP systems. On uniprocessor systems, support for SMP
+ systems can be disabled with:
+
+ ./configure --disable-smp-support
+
+ theoretically yielding slightly better performance.
+
+MAKE TARGETS
+------------
+
+In addition to the usual "make check" target, Userspace RCU features
+"make regtest" and "make bench" targets.
+
+make check: Short tests, meant to be run when rebuilding or porting
+ Userspace RCU.
+
+make regtest: Long (many hours) test, meant to be run when modifying
+ Userspace RCU or porting it to a new architecture or
+ operating system.
+
+make bench: Long (many hours) benchmarks.