【问题标题】:One process writing while the other one reads the shared memory一个进程写入,另一个进程读取共享内存
【发布时间】:2016-10-17 08:09:33
【问题描述】:

我有 2 个程序(进程)。一个进程写入共享内存,而另一个进程读取它。所以,我的方法是这样的: 最初,共享内存的值为 0。因此,进程 1 仅在值为 0 时写入。现在进程 1 已将其他值写入 shm 并“等待”直到值变为 0。进程 2 读取 shm 并将 0 写入其中。等待,我的意思是在 while(1) 循环中。

我的问题是这种方法是否可行,或者在 CPU 使用率和内存使用率方面我可以使用其他方法做得更好吗?

【问题讨论】:

  • 我们可能需要了解更多关于目的的信息,但我建议阅读unix socketsmessage queues。这两者都是进程间通信 (IPC) 机制,例如共享内存。
  • A `while(1)` 永远不会结束。
  • 当条件满足时我会打破它
  • Busy waiting 可能不是您想要的。您可能应该使用您的操作系统提供的一些同步机制。
  • 我使用了同步。但我的问题是第一个进程在第二个进程读取它之前无法写入。只有在第二个进程读取后,第一个进程才会写入......

标签: c linux semaphore shared-memory


【解决方案1】:

提到的问题称为进程同步问题和给定的逻辑只不过是问题的繁忙等待方法,这是非常主要的解决方案。

阅读与给定问题类似的Producer-Consumer Problem

有一些比忙碌等待更好的解决方案,例如:

自旋锁、信号量等

您可以从here获得所有这些的基本知识

希望对你有帮助!!

【讨论】:

  • 如果我在一个进程中写入同时在另一个进程中读取,我会得到脏数据吗?如果重要的话,在 Windows 上。
【解决方案2】:

我认为这很好,但是当两个进程都写入共享内存块时会出现问题。 那时您可以使用信号量来同步两个进程,允许一次写入共享资源/内存块。 你可以找到关于信号量的点击[这里](https://en.wikipedia.org/wiki/Semaphore_(programming)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多