Общая память: расположение и стратегии блокировки - PullRequest
0 голосов
/ 07 октября 2011

У меня есть писатель, который создает область общей памяти, я хотел бы убедиться, что читатели не смогут shm_open () область, пока писатель не будет готов. Мой хакерский способ сделать это - писатель будет shm_open в режиме только для чтения. После того, как регион правильно построен, я chmod () файл. Это отвратительно, и я не могу fcntl () дескриптор файла, чтобы изменить разрешения. Любые предложения (если не считать ужасную синхронизацию в регионе?)

Почему chmod () противная? Частично потому, что не существует glibc-кода (то есть открытого), чтобы сообщить мне, где находится область разделяемой памяти (например, / dev / shm). В glibc есть некоторый код для просмотра монтирований, я бы предпочел не копировать его, но у него может не быть выбора, если никто не может дать мне лучшее решение, чем chmod ().

1 Ответ

0 голосов
/ 08 октября 2011

Вместо использования shm_open вы, безусловно, можете использовать mmap - это позволяет вам использовать файл в каталоге по вашему выбору (возможно, это оптимизация для размещения его на виртуальном диске).

Но для решения проблемы блокировки, возможно, вам следует использовать мьютекс в общей области или (одним нажатием) просто скопировать () файл.

Однако, если вы пытаетесь заставить его вести себя как очередь, возможно, вам следует просто использовать вместо него объект IPC более очереди.

...