Вопрос

У меня запущено 10 процессов, каждый из которых записывает данные в один и тот же файл.Мне не нужно несколько авторов, поэтому в основном я ищу мьютекс / двоичный семафор для защиты записи в файл.Проблема в том, что я не могу разделить семафор между 10 процессами, поэтому я рассматриваю возможность использования общей памяти между 10 процессами и помещения семафора в общую память, чтобы к нему мог получить доступ каждый процесс.

Кто-нибудь может указать мне на документацию по этому вопросу на C / C ++ для Unix?Пример кода для использования этой структуры был бы отличным.

Спасибо

Это было полезно?

Решение

Это звучит так, как будто вам было бы лучше использовать flock(2):

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

Другие советы

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

В частности, проверьте:

Дополнительные пояснительные материалы см. Расширенное программирование в среде UNIX, раздел 14.3

Взгляните на Сетевое программирование UNIX Vol.2 автор W.Ричард Стивенс.

Это лучшая книга, когда-либо написанная на эту тему.

Вы могли бы использовать мьютексы PTHREAD.При инициализации мьютекса вам необходимо использовать pthread_mutexattr_setpshared pthread_mutexattr_setpshared функция, позволяющая сделать мьютекс общим для всех процессов, а затем поместить его в общую память.Все процессы могут подключаться к общей памяти, а затем получать доступ к мьютексу.

Также вы могли бы добавить дополнительные атрибуты к SHM на основе ваших требований к блокировке (рекурсивный и т.д.,)

Как насчет использования UNIX IPC для создания общей очереди?Один процесс считывает очередь и записывает в файл, все остальные процессы помещают данные в очередь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top