3

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

2 回答 2

3

到目前为止,您是正确的。

正如您在问题中提到的那样,您正在使用信号量来回答您的问题。

在posix semaphore api中,您有 sem_wait() ,它将一直等到信号量计数的值为零,一旦使用来自其他进程的 sem_post 递增,等待将完成。

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

进程 1(阅读器)
sem_wait(sem1);
…………

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

进程 2(writer)
sem_wait(sem2);
.......
.......
sem_post(sem1);

这样就可以在共享内存中实现同步。

于 2012-06-04T11:56:16.763 回答
0

This is hint and not an complete answer. Use condition variables. See https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables, that explains how it works. You can work out the solution from there.

于 2012-05-27T09:21:16.010 回答