A lock-free thread-safe skiplist implementation (no_std) for writing memery table, SST table or something else. skl-rs is a pure Rust implementation for https://github.com/dgraph-io/badger/tree/master/skl
English | 简体中文
[dependencies]
skl = "0.2"| targets | status |
|---|---|
| aarch64-linux-android | ✅ |
| aarch64-unknown-linux-gnu | ✅ |
| aarch64-unknown-linux-musl | ✅ |
| i686-pc-windows-gnu | ✅ |
| i686-linux-android | ✅ |
| i686-unknown-linux-gnu | ✅ |
| mips64-unknown-linux-gnuabi64 | ✅ |
| powerpc64-unknown-linux-gnu | ✅ |
| riscv64gc-unknown-linux-gnu | ✅ |
| wasm32-unknown-unknown | ✅ |
| wasm32-unknown-emscripten | ✅ |
| x86_64-unknown-linux-gnu | ✅ |
| x86_64-pc-windows-gnu | ✅ |
| x86_64-linux-android | ✅ |
use skl::FixedSKL;
fn main() {
const N: usize = 1000;
let l = FixedSKL::new(1 << 20);
let wg = Arc::new(());
for i in 0..N {
let w = wg.clone();
let l = l.clone();
std::thread::spawn(move || {
l.insert(key(i), new_value(i));
drop(w);
});
}
while Arc::strong_count(&wg) > 1 {}
for i in 0..N {
let w = wg.clone();
let l = l.clone();
std::thread::spawn(move || {
assert_eq!(
l.get(key(i)).unwrap().as_value_ref(),
new_value(i).as_value_ref(),
"broken: {i}"
);
drop(w);
});
}
}- make the crate test cases pass
cargo miri
Thanks in advance for your helps!
skl-rs is under the terms of both the MIT license and the
Apache License (Version 2.0).
See LICENSE-APACHE, LICENSE-MIT for details.
Copyright (c) 2022 Al Liu.