#hash-map #lock-free #hash

lockfreehashmap

一个并发、无锁的哈希表

3个版本

使用旧的Rust 2015

0.1.2 2018年3月24日
0.1.1 2018年3月24日
0.1.0 2018年3月24日

#52#并发

每月 28 次下载
用于 vampire_api

LGPL-3.0+

87KB
1.5K SLoC

LockFreeHashMap-rs

License Cargo Documentation

为Rust编写的并发、无锁哈希表。

这是由 Cliff Click 博士创建的无锁哈希表的实现。Click 发布了关于他的哈希表的演讲。此外,还有可用的“参考”Java代码在这里和更近期的在这里

入门指南

这个crate可以在crates.io上找到。

要在项目中使用此crate,请将以下内容添加到您的 Cargo.toml 文件

[dependencies]
lockfreehashmap = "0.1"

然后添加到您的项目根文件

extern crate lockfreehashmap;

示例

extern crate lockfreehashmap;
use lockfreehashmap::{self, LockFreeHashMap};

let map = LockFreeHashMap::<u8, u8>::new();
let insert_guard = lockfreehashmap::pin();
for i in 1..4 {
    map.insert(i, i, &insert_guard);
}
drop(insert_guard);

let map = &map;
lockfreehashmap::scope(|scope| {
    // Spawn multiple threads, e.g. for a server that executes some actions on a loop
    for _ in 0..16 {
        scope.spawn(|| {
            loop {
                let mut line = String::new();
                ::std::io::stdin().read_line(&mut line).unwrap();
                let iter = line.split_whitespace();
                let command: &str = iter.next().unwrap();
                let key: u8 = iter.next().unwrap().parse();
                let value: u8 = iter.next().unwrap().parse();
                let guard = lockfreehashmap::pin();
                let _result = match command {
                    "insert" => map.insert(key, value, &guard),
                    _ => {/* ... */},
                };
                drop(guard);
            }
        });
    }
});

许可证

GNU通用公共许可证v3.0或任何后续版本

有关详细信息,请参阅LICENSELICENSE.LESSER

依赖项

~1MB
~12K SLoC