【发布时间】:2017-06-12 12:39:09
【问题描述】:
我目前正在研究信号量和互斥的实际工作原理,遇到了以下问题。
假设我们在一个 CPU 上有两个内核。我们有两个进程,每个核心上运行一个。我们现在在两个内核上调用 wait() 调用,因为我们希望进入临界区:
wait(){
while(s.value <= 0)
// busy waiting
s.value--;
}
如果两个内核并行执行代码,并且初始信号量值为 1,则都读取 while 循环语句,结果为 false(自 s = 1 起)。这意味着,两者几乎同时减少信号量,结果为s = -1。现在,两个进程同时进入其临界区,这在互斥方面是不可能的。
我做错了什么?
感谢您的澄清。
【问题讨论】:
-
等待非零计数和递减通常在操作系统内核中处理,其方式使检查和递减成为原子操作。
标签: mutex semaphore multicore mutual-exclusion busy-waiting