4 个版本
0.2.2 | 2023 年 4 月 30 日 |
---|---|
0.2.1 | 2022 年 10 月 7 日 |
0.2.0 | 2022 年 9 月 1 日 |
0.1.0 | 2018 年 9 月 29 日 |
#768 in 并发
1,266 每月下载量
37KB
458 行
rsevents-extra
rsevents-extra
是一个工具 crate,它基于 (并且因此,在更高层次上) rsevents
构建了多个有用的同步 "原语"。rsevents-extra
是一个社区项目,欢迎向这个 crate 添加额外的同步对象!
关于 rsevents
请参阅 rsevents
的 README 和 文档,了解关于 rsevents
的更多信息,该库是这个 crate 构建的底层库。在核心上,rsevents
是一个低级信号和同步库,模仿 WIN32 自动和手动重置事件的行为,并且对于需要在严格遵循互斥锁或临界区概念之外添加轻量级和性能同步的程序非常有用。
这个 crate 包括一些基于 rsevents
库核心事件的附加同步类型。
包含的实用事件
这个 crate 包含以下事件的实现
- 倒计时事件
- 信号量
倒计时事件
倒计时事件是用于启动任务和检查其完成状态的有用同步工具。使用计数创建一个 CountdownEvent
对象,每次调用 CountdownEvent::tick()
时,内部计数会递减。等待者可以调用 CountdownEvent::wait()
(或 Awaitable
trait 提供的其他任何等待例程)来有效地阻塞,直到倒计时达到零。一旦内部倒计时达到零,事件变为设置状态,等待者会被唤醒/通知,事件保持设置状态,直到调用 CountdownEvent::reset()
。
信号量
信号量是一种同步原语,用于限制对特定资源或区域的并发访问或并发性。使用 Semaphore::new()
创建的信号量被分配了最大并发性和初始并发性(最多可达最大值)。线程通过调用 Semaphore::wait()
获取并发令牌,这为它们预留了一个访问并发受限区域的槽位,直到并发令牌在作用域结束时释放。如果更多线程尝试访问由信号量保护的区域,它们的 Semaphore::wait()
调用将会阻塞(同时它们高效地休眠)直到另一个线程释放其并发令牌或信号量的并发限制增加。
依赖关系
~0.2–5.5MB