我正在尝试找出一种方法来同步两个共享数据的进程。
基本上我有两个使用共享内存链接的进程。我需要进程 A 在共享内存区域中设置一些数据,然后进程 B 读取该数据并对其进行操作。
我期待的事件顺序是:
- B块等待数据可用信号
- A 写入数据
- 可用的信号数据
- B 读取数据
- B 块等待数据不可用信号
- A 信号数据不可用
- 一切又回到了起点。
换句话说,B 将阻塞直到它得到一个“1”信号,获取数据,然后再次阻塞,直到该信号变为“0”。
我已经设法使用纯共享内存来模拟它,但是我要么使用消耗 100% CPU 时间的 while 循环阻塞,要么我使用带有 nanosleep 的 while 循环,它有时会错过一些信号。
我尝试过使用信号量,但我只能找到一种等待零而不是一的方法,并且尝试使用两个信号量只是没有用。我不认为信号量是要走的路。
将有许多进程都访问同一个共享内存区域,并且当共享内存被修改时需要通知所有进程。
它基本上是在尝试模拟硬件数据和控制总线,其中事件是边缘触发而不是电平触发。这是我感兴趣的状态之间的转换,而不是状态本身。
那么,有什么想法或想法吗?