#cell #reference #pointers

无 std stack-cell-ref

在线程内部共享引用

1 个不稳定版本

0.1.0 2024 年 5 月 20 日

#951算法

MIT/Apache

6KB
52

Stack Cell Ref

在线程内部共享引用。

示例

use std::cell::Cell;

use stack_cell_ref::CellRef;

struct Foo {
    x: Cell<i32>,
}

thread_local! {
    static S: CellRef<Foo> = CellRef::new();
}

fn set_foo(x: i32) {
    S.with(|c| {
        c.read(|f| {
            f.unwrap().x.set(x);
        });
    });
}

let foo = Foo { x: Cell::new(0) };

S.with(|c| {
    c.with(&foo, || {
        set_foo(1);
    });
    assert_eq!(c.get_ptr(), None);
});
assert_eq!(foo.x.get(), 1);

lib.rs:

在线程内部共享引用。

示例

use std::cell::Cell;

use stack_cell_ref::CellRef;

struct Foo {
    x: Cell<i32>,
}

thread_local! {
    static S: CellRef<Foo> = CellRef::new();
}

fn set_foo(x: i32) {
    S.with(|c| {
        c.read(|f| {
            f.unwrap().x.set(x);
        });
    });
}

let foo = Foo { x: Cell::new(0) };

S.with(|c| {
    c.with(&foo, || {
        set_foo(1);
    });
    assert_eq!(c.get_ptr(), None);
});
assert_eq!(foo.x.get(), 1);

无运行时依赖