2015-10-24 151 views
0

我今天開始閱讀信號量,並有一個理論問題。信號量阻塞和解除阻塞

比方說你有2個線程,線程A和線程B,並且每個具有一信號量,信號量A和信號量B.在此非常假想例如信號量B的值是-3,目前被阻塞,那麼線程答題B.signal()。

我認爲我在閱讀中理解的是信號量B現在已解鎖,並遞增爲-2。即使B的信號量的值是-2,B的線程是否會繼續執行直到它遇到B.wait()?

回答

0

wikipedia

信號:遞增1的信號變量的值的增量 之後,如果預先遞增值是負(意味着有 流程等待資源),其傳送將信號量的等待隊列從 阻塞到就緒隊列。

因此,如果有任何可用的硬件線程(或可以被碰撞的低優先級線程),則B被移動到Os的就緒隊列並啓動。

但是更嚴重的問題是,你是如何到達-3只有2個線程......如果A有它應該在零,當B然後它需要它,然後它到-1。

+0

我到達-3,因爲這是一個假設的問題。加上糾正我,如果我錯了,我可以將它初始化爲-3。 – fatalError

+0

-3意味着你已經3在赤字開始之前,我不能說明它是不可能的。 – Surt