Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Semaphore 信号量_Semaphore_Spinlock - Fatal编程技术网

Semaphore 信号量

Semaphore 信号量,semaphore,spinlock,Semaphore,Spinlock,请检查我对信号灯的理解 我理解计算信号量和二进制信号量背后的想法。然而,在我看来,用signal()和wait()实现的自旋锁和信号量之间的区别是混合在一起的 例如,自旋锁基本上有两个值(锁定或解锁的二进制true/false)。因此,自旋锁基本上是一个二进制信号量,对吗 当另一个进程处于内部时,任何试图进入临界区的进程在被锁定时将无法进入,并将旋转并持续检查锁定状态,直到其解锁,然后才能进入并锁定 使用signal()和wait()函数的信号量本质上是从某种变量中加或减一个值。关于临界截面有一

请检查我对信号灯的理解

我理解计算信号量和二进制信号量背后的想法。然而,在我看来,用signal()和wait()实现的自旋锁和信号量之间的区别是混合在一起的

例如,自旋锁基本上有两个值(锁定或解锁的二进制true/false)。因此,自旋锁基本上是一个二进制信号量,对吗

当另一个进程处于内部时,任何试图进入临界区的进程在被锁定时将无法进入,并将旋转并持续检查锁定状态,直到其解锁,然后才能进入并锁定

使用signal()和wait()函数的信号量本质上是从某种变量中加或减一个值。关于临界截面有一个约束条件。只有当变量具有某种值时,才会打开它。消费者进程的一个示例实现是wait(满),当它满时执行,最后发出信号(空)。而生产者进程可能会等待(清空)并在清空为真时执行,然后在完成时发出信号(full)

wait()和实质上在循环中“等待”的自旋锁有什么区别

与信号量不同,自旋锁可用于无法睡眠的代码,如中断处理程序


+1因为我自己经常对这些概念感到困惑。谢谢,这真是一个复杂的话题。我读了很多书,感觉读得越多,我就越困惑!正如我所理解的,自旋锁不应该在单CPU系统中使用,除非它支持抢占式内核,如果它没有抢占式内核,那么使用自旋锁不是一个好主意。在读/写关键部分时,自旋锁应禁用中断,对吗?//edited@Google对不起,我对非强制性内核知之甚少