48 个版本
0.9.10 | 2024 年 4 月 25 日 |
---|---|
0.9.9 | 2023 年 10 月 17 日 |
0.9.8 | 2023 年 6 月 5 日 |
0.9.7 | 2023 年 2 月 1 日 |
0.2.0 | 2016 年 10 月 4 日 |
#1166 在 并发
12,157,018 每月下载量
在 30,011 个 crate 中使用 (21 直接)
130KB
2.5K SLoC
此库公开了一个低级 API,用于创建您自己的高效同步原语。
停车场
为了使同步原语保持小巧,所有线程排队和挂起功能都转移到 停车场。这个想法是基于 Webkit WTF::ParkingLot
类,该类本质上是一个将锁地址映射到挂起(休眠)线程队列的哈希表。Webkit 停车场本身受到了 Linux futex 的启发,但它更强大,因为它允许在持有队列锁的同时调用回调。
停车场可以执行两种主要操作
- 挂起 指在将线程同时入队到以某些地址为键的队列时挂起线程。
- 唤醒 指从以某些地址为键的队列中出队一个线程并恢复它。
有关详细信息,请参阅各个函数的文档。
构建自定义同步原语
由于停车场为您处理所有困难的部分,因此构建自定义同步原语非常简单。一个自定义原语的简单示例是在另一个数据类型中集成一个 Mutex
。由于互斥锁只需要 2 个位,它可以与其他数据共享空间。例如,可以创建一个 ArcMutex
类型,该类型将原子引用计数和两个互斥位结合在同一个原子字中。
依赖关系
~0–6MB
~20K SLoC