1

我正在Linux中使用信號量。我想知道信號值是否可以增加到初始值以外?如果是這樣,那麼什麼時候會發生?信號量值大於初始化值

例如,信號量的值被初始化爲1 如果我遞增兩次連續使用最多(SEM),將信號增量的超出1.

x(void){ 
sema_init(sem1, 1); 
down(sem1); 
{ 
    . 
    . // some code implementation 
    . 
} 
up(sem1); // i understand this increment the value back to 1. 
up(sem1); 
/* what exactly does this statement do to the semaphore? 
Will it increment the value to 2? If so what is the meaning of this statement? */ 

值}

回答

2

YES時會將其增加到2.結果是,接下來的兩個信號量下調用將不阻塞地運行。信號量的一般用例是保護一組資源。如果有1個資源,則信號量的最大期望值將爲1.如果有2個資源,則最大期望值爲2,依此類推。因此,將信號量增加到2是否正確取決於上下文。如果在任何給定時間只有一個進程應該超過信號量,那麼遞增到2就是代碼中的一個錯誤。如果允許2個或更多進程,則增加到2是允許的。

這是一個簡單的解釋。有關更多詳細信息,請查看「計數信號燈」。你可能會想到的另一種類型的信號量是「二進制信號量」,它可以是0或者1.