将数据写入共享存储区时唤醒进程

时间:2018-11-22 11:58:33

标签: fork ipc shared-memory

我们有一个应用程序,它依赖于与多个进程相关联的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使用率。

我们如何通过某种“ 轮询”机制实施更优化的解决方案,以轮询写入共享存储区的数据,这样,每次写入新数据时该过程都会收到信号,而不必定期醒来吗?

我们如何配置共享内存区域以实现这一目标?

0 个答案:

没有答案