【发布时间】:2018-07-26 00:20:46
【问题描述】:
假设我使用的是 CentOS 7 x86_64 + GCC 7。
我想在共享内存中创建一个环形缓冲区。
如果我有两个进程 Producer 和 Consumer,并且都共享一个命名的共享内存,它是通过 shm_open() + mmap() 创建/访问的。
如果 Producer 写了这样的内容:
struct Data {
uint64_t length;
char data[100];
}
随机到共享内存,并且Consumer不断轮询共享内存来读取。我是否会出现某种同步问题,即看到成员长度但成员数据仍在写入过程中?如果是,避免该问题的最有效技术是什么?
我看到这个帖子: Shared-memory IPC synchronization (lock-free)
但我想更深入、更深入地了解在两个进程之间有效同步所需的条件。
提前致谢!
【问题讨论】:
标签: c++ c linux posix shared-memory