【问题标题】:Semaphores and shared memory in linuxlinux中的信号量和共享内存
【发布时间】:2012-05-27 09:13:19
【问题描述】:

我在如何同步 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 中创建共享内存和信号量,并在进程 1 中获取共享内存和信号量 id,并在进程 1 中为共享内存执行 sem_wait,并在将数据复制到共享后在进程 2 中执行 sem_post记忆。

标签: linux memory semaphore shared


【解决方案1】:

到目前为止你是对的。

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

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

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

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

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

流程 2(作家)
sem_wait(sem2);
.......
.......
sem_post(sem1);

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

【讨论】:

    【解决方案2】:

    这是提示而不是完整的答案。 使用条件变量。请参阅https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables,它解释了它是如何工作的。您可以从那里找出解决方案。

    【讨论】:

    • 条件变量不应该只适用于线程吗?还是我错过了什么?
    • 好的,我以不同的方式解决了它。当我们设置 sem_op=0; 的值时,我们等待另一个进程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多