Нужна ли блокировка или мьютекс для shm_open?
Я хотел бы заниматься многопроцессорным программированием, где мне нужно обмениваться данными (случай чтения / записи).
Моя идея состоит в том, чтобы использовать разделяемую память для отслеживания индекса чтения / записи. И индекс указывает индекс общего файла. Например, если write index = 2, это означает, что средство записи пишет общий файл с именем "temp_2.data". если read index = 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 */
...