我想进行多进程编程,我需要共享数据(读写器案例)。
我的想法是使用共享内存来跟踪读/写索引。 索引表示共享文件索引。 例如,如果写入索引= 2,则表示writer正在编写名为的共享文件 " temp_2.data&#34 ;.如果读取索引= 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 */
...