Skip to content

A synchronization primitive for lock-free reads with one concurrent writer

License

Notifications You must be signed in to change notification settings

nivekuil/rculock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rculock

A read-copy-update lock using crossbeam.

The API is similar to std::sync::RwLock. Readers are lock-free and can exist concurrently with a writer, which updates the data protected by the lock only when the write guard is dropped.

This crate should currently be usable, but isn’t a very efficient implementation (see #1).

See documentation for more details.

Usage

[dependencies]
rculock = "0.1"

Examples

use rculock::{RcuLock, RcuGuard};

// Create a new RcuLock protecting a piece of data, in this case a number (u32).
let data: RcuLock<u32> = RcuLock::new(5);
assert_eq!(5, *data.read());
{
    // The data is cloned and handed to the writer
    let mut guard: RcuGuard<u32> = data.write();
    // RcuGuard implements `Deref` and `DerefMut` for easy access to the data.
    *guard = 4;
    // The writer has changed its copy of the data, but the changes
    // have not yet made it back to the master `RcuLock`.
    assert_eq!(5, *data.read());
}
// After the write guard is dropped, the state of the resource
// as the writer sees it is atomically stored back into the master RcuLock.
assert_eq!(4, *data.read());

About

A synchronization primitive for lock-free reads with one concurrent writer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages