C语言 如何等待共享内存被其他进程初始化?



我有两个进程A和B,它们正在使用共享内存。我想让进程B等到进程a完全初始化后再使用共享内存。为了协调这一点,我尝试使用命名信号量。

// process A
sem_t *s = sem_open(SNAME, O_CREAT|O_RDWR, 0644, 0);
(create and initialize shared memory here)
sem_post(s);
// process B
sem_t *s = sem_open(SNAME, O_CREAT|O_RDWR, 0644, 0);
sem_wait(s);
(load and use shared memory here)

但是,如果我先启动进程A,进程B将被困在sem_wait状态。这对我来说没有意义,因为我认为进程A中的sem_post(s)也会增加进程B的命名信号量中的计数器,因为它似乎是"共享的";在某种程度上。

修改此代码以确保进程B将等待进程A初始化共享内存而不假设进程B将首先启动的最简单方法是什么?

对于某些操作系统,有特定的屏障机制,这将是一个优势。

通常,还可以选择使用互斥锁/独占区来保护标志(变量),以指示初始化状态。而不是等待操作系统再次激活你的任务,你的睡眠和阅读价值。使用这种方法,进程顺序将不会影响结果。

相关内容

最新更新