double-checked-cell
A thread-safe lazily initialized cell using double-checked locking.
Introduction
Provides a memory location that can be safely shared between threads and initialized at most once. Once the cell is initialized it becomes immutable.
If you do not need to change the value after initialization
DoubleCheckedCell<T>
is more efficient than a Mutex<Option<T>>
.
extern crate double_checked_cell;
use DoubleCheckedCell;
Related crates
These crates are similar but distinct by design:
- lazy-init – Based on a
LazyTransform<T, U>
which can lazily consumeT
to produce anU
. Therefore can not support fallible initialization. - lazycell –
AtomicLazyCell
does not support lazy initialization (unlike its non-thread-safe counterpartLazyCell
usingLazyCell::borrow_with()
).
Documentation
Changelog
- 1.1.0
- Fix unsoundness:
DoubleCheckedCell<T>
whereT: !Send
cannot beSync
.
- Fix unsoundness:
- 1.0.1
- Ignore
unused_unsafe
warning due toUnsafeCell::into_inner()
no longer beeing unsafe.
- Ignore
- 1.0.0
- Initial release.
License
double-checked-cell is licensed under the Apache 2.0 and MIT license, at your option.