2013-07-24 77 views
0

有什麼方法可以知道等待特定信號量的進程或線程的數量? 就像一個API來檢查值。 Sem_getvalue()僅返回0而不是負數,其絕對值是在幾個站點上提到的阻塞信號量的任務數。查找在POSIX信號量上阻塞的任務數

任何幫助將是偉大的。

在此先感謝!

+0

我讀過,但有沒有其他的方式來發現或Linux只是不能找到計數? – user2437770

回答

0

除了sem_getvalue之外,在POSIX API中沒有辦法做到這一點,正如你所看到的那樣,語義是可選的。

也就是說,Linux的實現命名爲 POSIX信號作爲文件/dev/shm下,從而像fuser(1)一個實用工具可以告訴你哪些PROCESSS打開該文件。

如果這對您不適用,您可以使用POSIX互斥鎖,POSIX條件變量以及一些空間來記錄信號值和任何服務員,從而實現簿記信號。

0

我真的很厭惡POSIX信號量。他們缺少SYS V信號量提供的許多功能。

int semctl(int semid, int semnum, int cmd, ...); 

例如,要獲得的處理等待定義信號的數量變爲零:

如果使用SYS V信號,則可以使用了semctl函數得到的各種信息

int cnt = semtcl(my_semid, 0, GETZCNT); 

那簡單!

SYS V信號量萬歲!

0

可能是你可能已經採取了可變全球atomic_t,並呼籲sem_wait前遞增,並在減少的情況下你得到的信號。