rcu - MarekBykowski/readme GitHub Wiki

Illustration

Writer:

initialize → rcu_assign_pointer() → synchronize_rcu() → free

Reader:

rcu_read_lock() → rcu_dereference() → use → rcu_read_unlock()

Smallest possible example (no struct)

You could technically do:

int __rcu *gptr;

Reader:

rcu_read_lock();
int *p = rcu_dereference(gptr);
int v = p ? *p : -1;
rcu_read_unlock();

Writer:

int *new = kmalloc(sizeof(*new), GFP_KERNEL);
*new = 42;

old = rcu_dereference_protected(gptr, 1); /* Trust me — despite lock-less this access is already safe. */
rcu_assign_pointer(gptr, new);

synchronize_rcu();
kfree(old);