我在如何同步2个进程方面遇到了一些问题。第一个进程必须创建共享内存,然后等待第二个进程填充共享内存并将其信号化回第一个进程。我不知道如何让第一个进程等待。
以下是我的流程的伪代码:
处理1:
create shared memory
create a semaphore
wait for the second process /* this part i dont know how to write */
output the shared memory
过程2:
get shared memory id
get the semaphore id
wait();
fill the shared memory
signalize();
答案 0 :(得分:3)
到目前为止你是对的。
正如您在问题中提到的那样,您使用的信号量就是您问题的答案。
在posix信号量api中,你有sem_wait(),它会等到信号量计数值为零,一旦使用sem_post从其他进程递增,等待将完成。
在这种情况下,您必须使用2个信号量进行同步。
流程1(读者)
sem_wait(SEM1);
.......
.......
sem_post(sem2);
流程2(作者)
sem_wait(sem2);
.......
.......
sem_post(SEM1);
通过这种方式,您可以在共享内存中实现同步。
答案 1 :(得分:0)
这是暗示,而不是一个完整的答案。 使用条件变量。请参阅https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables,它解释了它的工作原理。你可以从那里找出解决方案。