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并发

Download history 2659224/week @ 2024-05-02 2627231/week @ 2024-05-09 2749319/week @ 2024-05-16 2592891/week @ 2024-05-23 2786715/week @ 2024-05-30 2717252/week @ 2024-06-06 2937201/week @ 2024-06-13 2780809/week @ 2024-06-20 2666851/week @ 2024-06-27 2494810/week @ 2024-07-04 2798579/week @ 2024-07-11 2812730/week @ 2024-07-18 2816614/week @ 2024-07-25 2978326/week @ 2024-08-01 3301206/week @ 2024-08-08 2532479/week @ 2024-08-15

12,157,018 每月下载量
30,011 个 crate 中使用 (21 直接)

MIT/Apache

130KB
2.5K SLoC

此库公开了一个低级 API,用于创建您自己的高效同步原语。

停车场

为了使同步原语保持小巧,所有线程排队和挂起功能都转移到 停车场。这个想法是基于 Webkit WTF::ParkingLot 类,该类本质上是一个将锁地址映射到挂起(休眠)线程队列的哈希表。Webkit 停车场本身受到了 Linux futex 的启发,但它更强大,因为它允许在持有队列锁的同时调用回调。

停车场可以执行两种主要操作

  • 挂起 指在将线程同时入队到以某些地址为键的队列时挂起线程。
  • 唤醒 指从以某些地址为键的队列中出队一个线程并恢复它。

有关详细信息,请参阅各个函数的文档。

构建自定义同步原语

由于停车场为您处理所有困难的部分,因此构建自定义同步原语非常简单。一个自定义原语的简单示例是在另一个数据类型中集成一个 Mutex。由于互斥锁只需要 2 个位,它可以与其他数据共享空间。例如,可以创建一个 ArcMutex 类型,该类型将原子引用计数和两个互斥位结合在同一个原子字中。

依赖关系

~0–6MB
~20K SLoC