syncell

Crates.iosyncell
lib.rssyncell
version0.1.0
sourcesrc
created_at2022-06-02 04:17:10.550786
updated_at2022-06-02 06:16:07.823733
descriptionSync alternative to RefCell
homepagehttps://github.com/kvark/syncell
repository
max_upload_size
id598653
size11,139
Dzmitry Malyshau (kvark)

documentation

README

syncell

Crates.io Docs.rs Build Status CodeCov.io

Just a Sync alternative to std::cell::RefCell. Useful when you have a value to share between tasks/closures, and you already know or guarantee that the access to the value is safe (for example, via choir task dependencies).

The cost of borrowing is a single atomic operation, and it's riguriously checked by both Loom and Miri.

Motivation

Rust already has tools for sharing values between threads, but it strikes me that they are all rather involved and complicated:

Shareable mutable containers exist to permit mutability in a controlled manner, even in the presence of aliasing. Both Cell<T> and RefCell<T> allow doing this in a single-threaded way. However, neither Cell<T> nor RefCell<T> are thread safe (they do not implement Sync). If you need to do aliasing and mutation between multiple threads it is possible to use Mutex<T>, RwLock<T> or atomic types.

This paragraph from std::cell documentation proposes to use lock-based primitives as an alternative in Sync world. But what if you just need sharing without locking, and still want safety? SynCell comes to help.

Commit count: 0

cargo fmt