在Linux中的信号量和共享内存

3

我有一个问题,如何同步两个进程。第一个进程必须创建共享内存,然后等待第二个进程填充共享内存并向第一个进程发出信号。我不知道如何让第一个进程等待。

以下是我的进程的伪代码:

进程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中创建共享内存和信号量,并在进程1中获取共享内存和信号量ID,在进程1中进行sem_wait以等待共享内存,将数据复制到共享内存后在进程2中进行sem_post。 - John
2个回答

3

你目前的说法是正确的。

正如你在问题中提到的,你正在使用信号量,这就是你问题的答案。

在posix信号量api中,你有sem_wait()函数,它会等待直到信号量计数的值为零,一旦通过其他进程使用sem_post()函数增加了计数,等待就会结束。

在这种情况下,你必须使用2个信号量来进行同步。

进程1(读取器)
sem_wait(sem1);
.......

.......
sem_post(sem2);

进程2(写入器)
sem_wait(sem2);
.......
.......
sem_post(sem1);

通过这种方式,你可以实现共享内存的同步。


0

条件变量不应该只能与线程一起使用吗?或者我漏掉了什么? - Jay
好的,我用不同的方法解决了它。当我们设置sem_op=0的值时,我们等待另一个进程。 - Kajzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接