8 个版本
使用旧的 Rust 2015
0.3.1 | 2018 年 4 月 10 日 |
---|---|
0.3.0 | 2018 年 4 月 3 日 |
0.2.3 | 2018 年 4 月 3 日 |
0.2.1 | 2018 年 3 月 16 日 |
0.1.1 | 2018 年 1 月 26 日 |
在 并发 中排名 598
每月下载 137 次
17KB
233 行
priomutex:等待线程指定优先级的互斥锁
API 与 std::sync::Mutex 非常相似。关键区别在于 lock() 接受一个优先级。当互斥锁被释放时,如果有多个线程在等待,则具有最高优先级的线程将获得它。
impl<T> Mutex<T> {
fn new(data: T) -> Mutex<T>;
fn lock(&self, prio: usize) -> LockResult<MutexGuard<T>>;
fn try_lock(&self) -> TryLockResult<MutexGuard<T>>;
}
impl<T> Drop for MutexGuard<T>; // Releases the lock
impl<T> Deref for MutexGuard<T>; // For accessing your data
impl<T> DerefMut for MutexGuard<T>; // For accessing your data
此 crate 还在 spin_one 模块中包含一个高性能变体,它会旋转最高优先级的等待线程。这使得释放互斥锁非常快,因为它永远不会执行任何系统调用。
状态
两种变体都没有使用不安全代码,因此不可能有两个线程同时持有互斥锁。然而,错误可能导致死锁或非优先级顺序锁定。目前我没有意识到任何这样的错误。
锁定时间的基准测试很难。然而,释放时间可以被可靠地测量
simple: 2887 ns
spin_one: 248 ns
(Intel Core i7-4790K CPU @ 4.00GHz, max_cstate = 0)
许可证
根据您的选择,以下任一许可证
- Apache 许可证 2.0 (见 LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可 (见 LICENSE-MIT 或 http://opensource.org/licenses/MIT)
除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献均应如上双许可,而不附加任何其他条款或条件。