【问题标题】:Is there a way to increment a semaphore and decrement another one atomically in POSIX?有没有办法在POSIX中原子地增加一个信号量并减少另一个信号量?
【发布时间】:2023-03-16 23:05:02
【问题描述】:

有没有办法在一个(原子)操作中对不同的信号量进行多次递增/递减?

我看到在 SysV 中可以做到这一点,我想知道是否有办法使用 POSIX API 做到这一点。

这是我想做的事情(在 SysV 中):

  sem[0].sem_num = 0;
  sem[0].sem_op  = 1;
  sem[0].sem_flg = 0;

  sem[1].sem_num = 1;
  sem[1].sem_op  = -1;
  sem[1].sem_flg = 0;

  semop(semid, sem, 2)

有没有办法在 POSIX 中做同样的事情?

【问题讨论】:

  • Posix 有 semop()
  • 编辑后,semop() is posix。如果您想知道XSI,请引用标准Application writers may confidently make use of an extension on all systems supporting the X/Open System Interfaces Extension。你有一个实际的系统,你有semaphore.h 但没有 XSI 信号量?能分享一下是什么系统吗?
  • 或者您只是想使用<semaphore.h> 信号量而不是 XSI 信号量(用于其他功能,或匹配现有代码)?

标签: c posix ipc semaphore posix-api


【解决方案1】:

有没有办法使用semaphore.h 做同样的事情?

不,这是不可能的。

有没有办法在 POSIX 中做同样的事情

您发布的代码使用 POSIX 的 XSI 扩展。通常,即使标准规定,如果您在 POSIX 兼容平台上,您可以放心使用 XSI 扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多