SEM_UNDO - 它是如何工作的?

时间:2015-05-18 21:09:55

标签: c linux semaphore

我知道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)

1 个答案:

答案 0 :(得分:2)

  1. 创建并初始化信号量为1。
  2. 让进程A在while循环中等待semval = 0(没有IPC_NOWAIT)
  3. 让进程B使用SEM_UNDO将相同的信号量值设置为0并退出。
  4. i)您将看到进程A将获得一次信号量,然后再次等待。 (因为进程B退出并将信号量值再次设置为1.)

    ii)现在,更改步骤3而不是立即退出,放置sleep(some_time)。在这种情况下,您将看到进程A连续不断地获取信号量,直到有人再次设置除0之外的信号量值。因为进程B没有退出并且无法设置回1。