#互斥锁 #线程 #等待 #优先级 #指定

priomutex

等待线程指定优先级的互斥锁

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

Download history 7/week @ 2024-03-30 12/week @ 2024-04-20 24/week @ 2024-04-27 4/week @ 2024-05-04 114/week @ 2024-06-22 11/week @ 2024-06-29 4/week @ 2024-07-06 8/week @ 2024-07-13

每月下载 137

MIT/Apache 许可

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 许可证定义,您有意提交的任何贡献均应如上双许可,而不附加任何其他条款或条件。

没有运行时依赖项