Struct once_cell::sync::OnceCell[][src]

pub struct OnceCell<T> { /* fields omitted */ }

A thread-safe cell which can be written to only once.

Unlike ::std::sync::Mutex, a OnceCell provides simple & references to the contents.

Example

use once_cell::sync::OnceCell;

static CELL: OnceCell<String> = OnceCell::INIT;
assert!(CELL.get().is_none());

::std::thread::spawn(|| {
    let value: &String = CELL.get_or_init(|| {
        "Hello, World!".to_string()
    });
    assert_eq!(value, "Hello, World!");
}).join().unwrap();

let value: Option<&String> = CELL.get();
assert!(value.is_some());
assert_eq!(value.unwrap().as_str(), "Hello, World!");

Methods

impl<T> OnceCell<T>
[src]

INIT: OnceCell<T> = OnceCell{inner: <AtomicPtr>::new(ptr::null_mut()), once: ONCE_INIT,}

An empty cell, for initialization in a const context.

Creates a new empty cell.

Gets the reference to the underlying value. Returns None if the cell is empty.

Sets the contents of this cell to value. Returns Ok(()) if the cell was empty and Err(value) if it was full.

Example

use once_cell::sync::OnceCell;

static CELL: OnceCell<i32> = OnceCell::INIT;

fn main() {
    assert!(CELL.get().is_none());

    ::std::thread::spawn(|| {
        assert_eq!(CELL.set(92), Ok(()));
    }).join().unwrap();

    assert_eq!(CELL.set(62), Err(62));
    assert_eq!(CELL.get(), Some(&92));
}

Gets the contents of the cell, initializing it with f if the cell was empty. May threads may call get_or_init concurrently with different initializing functions, but it is guaranteed that only one function will be executed.

Example

use once_cell::sync::OnceCell;

let cell = OnceCell::new();
let value = cell.get_or_init(|| 92);
assert_eq!(value, &92);
let value = cell.get_or_init(|| unreachable!());
assert_eq!(value, &92);

Trait Implementations

impl<T: Debug> Debug for OnceCell<T>
[src]

Formats the value using the given formatter. Read more

impl<T: Sync + Send> Sync for OnceCell<T>
[src]

impl<T: Send> Send for OnceCell<T>
[src]

impl<T> Drop for OnceCell<T>
[src]

Executes the destructor for this type. Read more