#mutex #lock #locking #thread #spin

fast-async-mutex

这是一个提供异步锁定机制的库(Mutex、RwLock、OrderedMutex 和 OrderedRwLock)

29 个版本 (4 个重大更新)

0.6.7 2020 年 12 月 6 日
0.6.6 2020 年 12 月 1 日
0.6.5 2020 年 11 月 26 日
0.6.3 2020 年 9 月 11 日
0.2.0 2020 年 9 月 4 日

#623 in 并发

Download history 261/week @ 2024-03-13 131/week @ 2024-03-20 268/week @ 2024-03-27 171/week @ 2024-04-03 135/week @ 2024-04-10 127/week @ 2024-04-17 81/week @ 2024-04-24 80/week @ 2024-05-01 85/week @ 2024-05-08 132/week @ 2024-05-15 80/week @ 2024-05-22 71/week @ 2024-05-29 47/week @ 2024-06-05 79/week @ 2024-06-12 57/week @ 2024-06-19 63/week @ 2024-06-26

每月 257 次下载
用于 2 crates

Apache-2.0/MIT

65KB
1K SLoC

fast-async-mutex

这是一个提供异步锁定机制的库,它使用自旋锁算法。它可能非常高效,因为当互斥锁尝试获取数据失败时,它会将这些控制权返回给异步运行时。这个库只基于原子操作构建,不使用其他 std 同步数据结构,这使得这个库非常快速。

示例

use fast_async_mutex::mutex::Mutex;

#[tokio::main]
async fn main() {
    let mutex = Mutex::new(10);
    let guard = mutex.lock().await;
    assert_eq!(*guard, 10);
}

基准测试

基准测试的结果是在 MacBook Pro (16-inch, 2019) 2,3 GHz 8-Core Intel Core i9 16GB RAM 上运行的。测试可以在 benchmarks 目录 中找到。

running 35 tests
test mutex::fast_async_mutex::tests::concurrency_without_waiting          ... bench:      49,844 ns/iter (+/- 3,223)
test mutex::fast_async_mutex::tests::create                               ... bench:           0 ns/iter (+/- 0)
test mutex::fast_async_mutex::tests::step_by_step_without_waiting         ... bench:      22,685 ns/iter (+/- 18,466)
test mutex::fast_async_mutex_ordered::tests::concurrency_without_waiting  ... bench:      50,173 ns/iter (+/- 1,163)
test mutex::fast_async_mutex_ordered::tests::create                       ... bench:           0 ns/iter (+/- 0)
test mutex::fast_async_mutex_ordered::tests::step_by_step_without_waiting ... bench:      22,007 ns/iter (+/- 2,974)
test mutex::futures::tests::concurrency_without_waiting                   ... bench:      76,535 ns/iter (+/- 12,181)
test mutex::futures::tests::create                                        ... bench:          92 ns/iter (+/- 17)
test mutex::futures::tests::step_by_step_without_waiting                  ... bench:      23,109 ns/iter (+/- 7,627)
test mutex::smol::tests::concurrency_without_waiting                      ... bench:      66,312 ns/iter (+/- 4,924)
test mutex::smol::tests::create                                           ... bench:           0 ns/iter (+/- 0)
test mutex::smol::tests::step_by_step_without_waiting                     ... bench:      28,466 ns/iter (+/- 3,385)
test mutex::tokio::tests::concurrency_without_waiting                     ... bench:      60,833 ns/iter (+/- 11,640)
test mutex::tokio::tests::create                                          ... bench:           6 ns/iter (+/- 3)
test mutex::tokio::tests::step_by_step_without_waiting                    ... bench:      31,924 ns/iter (+/- 9,327)
test rwlock::fast_async_mutex::tests::concurrency_read                    ... bench:      53,613 ns/iter (+/- 4,125)
test rwlock::fast_async_mutex::tests::concurrency_write                   ... bench:      50,652 ns/iter (+/- 1,181)
test rwlock::fast_async_mutex::tests::create                              ... bench:           0 ns/iter (+/- 0)
test rwlock::fast_async_mutex::tests::step_by_step_read                   ... bench:      23,161 ns/iter (+/- 5,225)
test rwlock::fast_async_mutex::tests::step_by_step_writing                ... bench:      23,330 ns/iter (+/- 4,819)
test rwlock::fast_async_mutex_ordered::tests::concurrency_read            ... bench:      50,208 ns/iter (+/- 896)
test rwlock::fast_async_mutex_ordered::tests::concurrency_write           ... bench:      50,227 ns/iter (+/- 1,984)
test rwlock::fast_async_mutex_ordered::tests::create                      ... bench:           0 ns/iter (+/- 0)
test rwlock::fast_async_mutex_ordered::tests::step_by_step_read           ... bench:      23,059 ns/iter (+/- 2,393)
test rwlock::fast_async_mutex_ordered::tests::step_by_step_writing        ... bench:      22,074 ns/iter (+/- 5,107)
test rwlock::smol::tests::concurrency_read                                ... bench:      55,767 ns/iter (+/- 1,843)
test rwlock::smol::tests::concurrency_write                               ... bench:      85,189 ns/iter (+/- 2,852)
test rwlock::smol::tests::create                                          ... bench:           1 ns/iter (+/- 0)
test rwlock::smol::tests::step_by_step_read                               ... bench:      22,644 ns/iter (+/- 1,688)
test rwlock::smol::tests::step_by_step_writing                            ... bench:      25,769 ns/iter (+/- 2,010)
test rwlock::tokio::tests::concurrency_read                               ... bench:      52,960 ns/iter (+/- 939)
test rwlock::tokio::tests::concurrency_write                              ... bench:      60,748 ns/iter (+/- 4,604)
test rwlock::tokio::tests::create                                         ... bench:           5 ns/iter (+/- 1)
test rwlock::tokio::tests::step_by_step_read                              ... bench:      31,437 ns/iter (+/- 6,948)
test rwlock::tokio::tests::step_by_step_writing                           ... bench:      29,766 ns/iter (+/- 8,081)

test result: ok. 0 passed; 0 failed; 0 ignored; 35 measured; 0 filtered out

许可证

根据以下任一许可证授权

由您选择。

贡献

除非您明确声明,否则您根据 Apache-2.0 许可证定义的任何旨在包含在本作品中的有意贡献,均应按上述方式双重许可,而无需附加条款或条件。

无运行时依赖