Linux中的信号量和共享内存

时间:2012-05-27 09:13:19

标签: linux memory semaphore shared

我在如何同步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();

2 个答案:

答案 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,它解释了它的工作原理。你可以从那里找出解决方案。