2

我想做多进程编程,我需要共享数据(读/写案例)。

我的想法是使用共享内存来跟踪读/写索引。index 表示共享文件的索引。例如,如果 write index = 2,则表示 writer 正在写入名为“temp_2.data”的共享文件。如果读取索引 = 1,则表示阅读器正在读取名为“temp_1.data”的共享文件。

我的问题是:

  1. 我是否需要同步机制,例如:访问下面的 rptr? 还是 shm_open 本身承诺同步? 如果是这样,它是如何进行 同步的?

  2. 共享内存和共享文件的混合设计有意义吗?或者有 没有更好的方法?

谢谢~

#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 */
...
4

0 回答 0