【发布时间】:2021-03-02 02:44:11
【问题描述】:
在整个 StackOverflow 和网络上,我看到人们区分互斥锁和自旋锁,因为互斥锁是提供 acquire() 和 release() 功能的互斥锁,如果锁定,则 acquire() 将允许进程被抢占。
尽管如此,A. Silberschatz 在他的操作系统概念中的第 6.5 节中说:
... 这些工具中最简单的是互斥锁。 (事实上,互斥锁是互斥的缩写。)我们使用互斥锁来保护临界区,从而防止竞争条件。也就是说,一个进程必须在进入临界区之前获得锁;它在退出临界区时释放锁。 acquire() 函数获取锁,release() 函数释放锁。
然后他描述了一个自旋锁,虽然稍后添加了一点
我们一直在描述的互斥锁类型也称为自旋锁,因为进程在等待锁可用时“自旋”。
所以自旋锁只是一种互斥锁,而不是允许进程被抢占的可休眠锁。也就是说,自旋锁和可休眠锁都是互斥锁:通过acquire() 和release() 函数进行锁定。
我认为以 Silberschatz 的方式定义互斥锁是完全合乎逻辑的(虽然有点含蓄)。
你会同意哪种方法?
【问题讨论】:
-
您指的是哪种方法?您的问题不清楚。
-
定义互斥锁的方法。许多资源将互斥锁和自旋锁称为不同的东西。它与我提到的书的方法不同。
标签: multithreading concurrency operating-system mutex spinlock