我想做多进程编程,我需要共享数据(读/写案例)。
我的想法是使用共享内存来跟踪读/写索引。index 表示共享文件的索引。例如,如果 write index = 2,则表示 writer 正在写入名为“temp_2.data”的共享文件。如果读取索引 = 1,则表示阅读器正在读取名为“temp_1.data”的共享文件。
我的问题是:
我是否需要同步机制,例如:访问下面的 rptr? 还是 shm_open 本身承诺同步? 如果是这样,它是如何进行 同步的?
共享内存和共享文件的混合设计有意义吗?或者有 没有更好的方法?
谢谢~
#include <unistd.h>
#include <sys/mman.h>
...
#define MAX_LEN 10000
struct region { /* Defines "structure" of shared memory */
int len;
char buf[MAX_LEN];
};
struct region *rptr;
int fd;
/* Create shared memory object and set its size */
fd = shm_open("/myregion", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
if (fd == -1)
/* Handle error */;
if (ftruncate(fd, sizeof(struct region)) == -1)
/* Handle error */;
/* Map shared memory object */
rptr = mmap(NULL, sizeof(struct region),
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (rptr == MAP_FAILED)
/* Handle error */;
/* Now we can refer to mapped region using fields of rptr;
for example, rptr->len */
...