#链表 #无锁 #列表 #链式 #前置

无 std leaklist

一个简单、并发、无锁的单链表

6 个版本

0.2.4 2024年1月9日
0.2.3 2024年1月9日
0.1.0 2024年1月1日

#278并发

Download history 12/week @ 2024-03-27 25/week @ 2024-04-03

每月 60 次下载

MIT/Apache

15KB
206

leaklist

GitHub License docs.rs

一个简单、并发、无锁的单链表。仅支持前置元素,并且每个新元素都会发生内存泄漏。

此类列表对于设置只需初始化一次且在整个程序运行期间存在的对象链非常有用。

示例

let list: LeakList<u32> = LeakList::new();
let node1 = list.push_front(1);
let node2 = list.push_front(2);
println!("node1: {:?}", node1);
println!("node2: {:?}", node2);

std::thread::scope(|s| {
    s.spawn(|| {
        let node3 = list.push_front(3);
        println!("node3: {:?}", node3);
    });
    s.spawn(|| {
        let node4 = list.push_front(4);
        println!("node4: {:?}", node4);
    });
});

println!("list: {:?}", list.iter().copied().collect::<Vec<_>>());

输出可能是

node1: Node { val: 1, next: None }
node2: Node { val: 2, next: Some(Node { val: 1, next: None }) }
node3: Node { val: 3, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }
node4: Node { val: 4, next: Some(Node { val: 3, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }) }
list: [4, 3, 2, 1]

或者

node1: Node { val: 1, next: None }
node2: Node { val: 2, next: Some(Node { val: 1, next: None }) }
node4: Node { val: 4, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }
node3: Node { val: 3, next: Some(Node { val: 4, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }) }
list: [3, 4, 2, 1]

许可证

该项目受 MITApache-2.0 许可的双重许可。

无运行时依赖