This adds fairly basic support for rcu.
Declaring:
mutex mtx; rcu_ptr
Read-side:
WITH_LOCK(rcu_read_lock) { const my_object* p = my_ptr.read(); // do things with *p // but don't block! }
Write-side:
WITH_LOCK(mtx) { my_object* old = my_ptr.read_by_owner(); my_object* p = new my_object; // ... my_ptr.assign(p); rcu_dispose(old); // or rcu_defer(some_func, old); }
94b6979 rcu: add basic read-copy-update implementation
build.mk | 1 +
core/rcu.cc | 121 ++++++++++++++++++++++++++++++++++++++++
include/osv/rcu.hh | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
loader.cc | 4 ++
4 files changed, 283 insertions(+)
Upstream: github.com