刚刚观看了一个关于信号量的视频,并试图挖掘更多信息。不太清楚信号灯如何在组件级别上工作。不理解信号量低层
P(s):
s = s - 1
if (s < 0) {wait on s}
CRITICAL SECTION
V(s):
s = s + 1
if(threads are waiting on s) {wake one}
我明白这些功能背后的概念是什么,但是我无法绕开这个念头。
说S = 1 ,你有2个线程:线程1和线程2
Thread One Thread Two
load s load s
subtract s,1 subtract s,1
save s save s
然后是在减法之间的上下文切换和保存两个设定s至0两者。不会两个线程都将s看作0进入关键部分。我不确定如果一个线程可以在汇编级别上下文切换以使两个线程都可以看到s = 0,那么这个线程是如何独占的。
您忘记了故障中的“等待”部分。 –
不确定你的意思? S上有一个互斥量吗? – train55255
不,不是互斥体,而是信号量。它是一种不同的同步机制,但就像互斥体一样,它通常提供高效*阻塞*,即它与OS调度程序交互。 –