我们有一个应用程序,它依赖于与多个进程相关联的CORE进程(它们都是CORE进程的子级)。
要交换数据,它们使用不同的共享内存区域。这些区域的创建是这样的:
fd_value = shm_open(shm_key, O_CREAT | O_RDWR | O_EXCL , S_IRWXU);
pshm = mmap(NULL, memory_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd_value, 0);
不同的过程将依此类推:
shm_fd = shm_open(shm_key, O_RDWR, S_IRWXU);
pshm = mmap(NULL, memory_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
这会在 / dev / shm /
中创建几个描述符文件当前,每个进程都有一个定期计时器。进程进入睡眠状态,直到计时器到期,然后唤醒,检查该共享内存区域中是否有新数据,如果没有,则以无限循环返回睡眠状态。如果有新数据,它将执行一些例程,然后再次进入睡眠状态。
但是,这会在传输的数据中引入延迟,因为有时它会在数据进入休眠状态后立即到达数据,因此数据需要整个计时器周期才能被该过程查看并进行处理。 / p>
我们总是可以减少周期(增加频率),但这会大大增加CPU使用率。
我们如何通过某种“ 轮询”机制实施更优化的解决方案,以轮询写入共享存储区的数据,这样,每次写入新数据时该过程都会收到信号,而不必定期醒来吗?
我们如何配置共享内存区域以实现这一目标?