Home

Awesome

double-checked-cell

A thread-safe lazily initialized cell using double-checked locking.

Build Status crates.io docs.rs No maintenance intended

Deprecated

You should probably use once_cell instead of this crate. It provides a superset of this crate's functionality, with a nicely consistent API. Its functionality is also being considered for inclusion in the standard library.

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 double_checked_cell::DoubleCheckedCell;

fn main() {
    let cell = DoubleCheckedCell::new();

    // The cell starts uninitialized.
    assert_eq!(cell.get(), None);

    // Perform potentially expensive initialization.
    let value = cell.get_or_init(|| 21 + 21);
    assert_eq!(*value, 42);
    assert_eq!(cell.get(), Some(&42));

    // The cell is already initialized.
    let value = cell.get_or_init(|| unreachable!());
    assert_eq!(*value, 42);
    assert_eq!(cell.get(), Some(&42));
}

Related crates

These crates are similar but distinct by design:

Documentation

Read the documentation

Changelog

License

double-checked-cell is licensed under the Apache 2.0 and MIT license, at your option.