Нужна ли блокировка или мьютекс для shm_open?

Я хотел бы заниматься многопроцессорным программированием, где мне нужно обмениваться данными (случай чтения / записи).

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

0 ответов

Другие вопросы по тегам