取消阻止等待信号量的所有进程

时间:2018-06-02 19:19:18

标签: linux multithreading locking semaphore race-condition

我有一个程序需要多个进程访问共享资源。这些共享资源在它们全部启动时不存在,因此其中一个需要创建它。创建共享资源后,将安装重要的基础结构以供以后使用。但是,如果"创建者"进程计划之前它可以在共享资源中安装基础结构,其他进程将尝试使用未初始化的数据(导致未定义的行为)。

为了控制这一点,我创建了一个名为的信号量(sem_t *sem_init)。任何不是创造者的过程" down"或"等待"在这个零初始化的信号量上。当创建者进程完成设置后,它就会出现" up""或者"帖子"信号量,释放进程。但是,仍有一个问题。 我不确切知道有多少进程正在等待

为了解决这个问题,我有以下选择:

  1. 我创建了一个计数信号量。每个流程" up""或者"帖子"在阻塞初始化信号量之前,在此信号量上。这样,我就可以知道要发布多少个进程。

  2. 我只是"发布"在初始化信号量上,直到它是最大允许值。

  3. 我不喜欢这些"解决方案"虽然。首先,当涉及到我可以计算的进程数时,我受限于信号量的最大大小。它似乎"发布"这么多次会产生令人讨厌的开销。我的问题是,是否有任何方法可以指示信号量发布所有阻止的进程,而不必在我的结尾处进行任何明确的记账。我也不喜欢被信号量的最大值约束。

    sem_releaseAll (sem_t *sem_p);这样的东西是理想的。

    注意:我更喜欢Linux原生解决方案。

0 个答案:

没有答案