2011-02-25 40 views

回答

1

是的,sem_t可以取值大於1.您可以使用sem_init將信號量初始化爲abitrary值。從this link引述:

要初始化信號量,使用 sem_init():

int sem_init(sem_t *sem, int pshared, unsigned int value); 
  • sem指向一個信號量對象 初始化
  • pshared的是一個標誌 表示是否不是 信號量應與 fork()ed進程共享。 LinuxThreads的不 當前不支持共享 信號燈
  • 值是初始值 信號量設定爲
  • 實施例的

使用:

sem_init(&sem_name, 0, 10); 

我不知道的任何函數,可以通過任意值增加sem_t。

+1

另請參閱此問題,可能的重複:http://stackoverflow.com/questions/3491762/incrementing-the-value-of-posix-semaphores-by-more-than-1 – razlebe 2011-02-25 11:29:29

+2

pshared不會使信號量共享與分叉的孩子。只有當信號量在已經共享的內存中創建時纔有用,在這種情況下,pshared信號量可以與可映射共享內存的任何其他進程共享,而不僅僅是兒童。 – 2011-06-13 19:40:38