剛剛觀看了一個關於信號量的視頻,並試圖挖掘更多信息。不太清楚信號燈如何在組件級別上工作。不理解信號量低層
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調度程序交互。 –