使用两种不同的状态同步两个进程

Maj*_*nko 5 c linux shared-memory

我试图找到一种方法来同步两个共享数据的进程.

基本上我有两个使用共享内存链接的进程.我需要进程A在共享内存区域中设置一些数据,然后进程B读取该数据并对其进行操作.

我期待的事件顺序是:

  1. B块等待数据可用信号
  2. A写入数据
  3. 可用的信号数据
  4. B读取数据
  5. B块等待数据不可用信号
  6. 信号数据不可用
  7. 一切都回到了开始.

换句话说,B将阻塞直到它得到"1"信号,得到数据,然后再次阻塞,直到该信号变为"0".

我已经设法使用纯共享内存来模拟它,但是我使用while循环消耗100%的CPU时间,或者我使用带有nanosleep的while循环,有时会错过某些信号.

我已经尝试过使用信号量,但我只能找到一种方法来等待零,而不是一个,并尝试使用两个信号量只是没有用.我不认为信号量是要走的路.

将有许多进程都访问相同的共享内存区域,并且在修改共享内存时需要通知所有进程.

它基本上试图模拟硬件数据和控制总线,其中事件是边缘而不是电平触发.这是我感兴趣的国家之间的转变,而不是国家本身.

那么,任何想法或想法?

小智 0

如果涉及 2 个进程,您可以使用文件、共享内存甚至网络来传递标志或信号。但如果进程较多的话,修改内核也许有一些合适的解决方案。你的问题中有一个共同的记忆,对吧?!现在信号是如何传递的?!