2013-08-25 25 views
0

這是我的理解有關計數信號我對信號量的邏輯是否正確?

P1 enters critical state 
calls wait() 
wait() 
{ 
semaphore--; 
if (semaphore<=0) 
block; 
else 
execute the c.s 
after execution in c.s calls signal(); 
} 
signal() 
{ 
semaphore++; 
If(blocked process exists) 
allow first process that is waiting and P1 leaves c.s 
} 

如果我是正確的,然後告訴我說只能有1和0的二進制值信號的情況下會發生什麼。或者二進制信號量的實現與此不同?

回答

1

這裏有幾件事情:

先了解什麼是信號量是建立在這樣做。像信號量這樣的構造是爲了幫助實現程序的併發性而構建的。問問自己 - 你想達到什麼目標?同步?相互排斥?都?

根據問題的答案,你使用你的信號量的方式將完全改變。瞭解信號量的作用對理解二進制和計數信號量之間的差異至關重要。

我已經詳細解釋了二進制/計數信號量之間的差異,這對您有用:https://stackoverflow.com/a/22582997/2112500 完整,緩慢地逐步完成此過程,並確保您瞭解基本原理。上面的代碼告訴我,你已經瞭解了(在一定程度上)裏面的是一個信號量,並不一定告訴我你已經知道如何使用它了。

例如,在該位的僞代碼:

else 
execute the c.s 
after execution in c.s calls signal(); 

你從等待內部信號 - 這似乎不太去工作,你希望它的方式。

再次,在這裏: allow first process that is waiting and P1 leaves c.s 我不認爲你十分把握在信號端,它在一個線程應用開始。我建議從上面的鏈接開始。然後繼續嘗試在一些簡單的程序中使用信號量來實現同步和互斥。