2015-05-18 131 views
0

我知道SEM_UNDO標誌撤消操作後,進程終止 但我想知道如何在我的程序中證明它。SEM_UNDO - 它是如何工作的?

實施例:

Semaphore A (process 1) has value = 1; 
Semaphore A (process 1) wait. 
Semaphore A (process 2) is decrementing (WITH FLAG = SEM_UNDO). 
Sempahore A (process 1) has value = 0; 
Process 2 end. 
semaphore a (process 1) has value = 1 ? (undo decrementing) 

回答

2
  1. 創建並初始化信號量爲1
  2. 令處理A等待在while循環semval = 0(無IPC_NOWAIT)
  3. 設處理B設定爲相同使用SEM_UNDO將信號量值設置爲0並退出。

i)你會看到進程A會得到信號1次,然後再等待。 (因爲進程B退出並將信號值再次設置爲1.)

ii)現在,更改步驟3,而不是立即退出,請將sleep(some_time)。在這種情況下,您將看到進程A不斷地獲取信號量,直到某人再次將信號值設置爲0以外爲止。因爲進程B不會退出並且不能設置回1.

相關問題