我有一个程序需要多个进程访问共享资源。这些共享资源在它们全部启动时不存在,因此其中一个需要创建它。创建共享资源后,将安装重要的基础结构以供以后使用。但是,如果"创建者"进程计划之前它可以在共享资源中安装基础结构,其他进程将尝试使用未初始化的数据(导致未定义的行为)。
为了控制这一点,我创建了一个名为的信号量(sem_t *sem_init
)。任何不是创造者的过程" down"或"等待"在这个零初始化的信号量上。当创建者进程完成设置后,它就会出现" up""或者"帖子"信号量,释放进程。但是,仍有一个问题。 我不确切知道有多少进程正在等待。
为了解决这个问题,我有以下选择:
我创建了一个计数信号量。每个流程" up""或者"帖子"在阻塞初始化信号量之前,在此信号量上。这样,我就可以知道要发布多少个进程。
我只是"发布"在初始化信号量上,直到它是最大允许值。
我不喜欢这些"解决方案"虽然。首先,当涉及到我可以计算的进程数时,我受限于信号量的最大大小。它似乎"发布"这么多次会产生令人讨厌的开销。我的问题是,是否有任何方法可以指示信号量发布所有阻止的进程,而不必在我的结尾处进行任何明确的记账。我也不喜欢被信号量的最大值约束。
像sem_releaseAll (sem_t *sem_p);
这样的东西是理想的。
注意:我更喜欢Linux原生解决方案。