У меня есть программа Linux C, где я передаю данные между потоками. Я искал использование очередей сообщений POSIX для решения этой проблемы, поскольку они не требуют взаимных блокировок/блокировок.POSIX очереди сообщений для передачи данных между Pthreads
Глядя на вызов mq_open(), я должен указать разрешения и путь к очереди. Это приводит меня к двум вопросам.
- Есть ли известное соглашение для указания пути к файлу? Я был , просто отправляя очереди в той же папке, что и исполняемый файл.
- Что касается разрешений, я собирался использовать 0600, но я хочу еще больше ограничить это, чтобы другие процессы не обращались к очередям (я делясь данными между потоками, а не процессами). Учитывая, что очередь является «просто» файлом, могу ли я использовать flock() с LOCK_EX для предотвращения доступа из других процессов?
Заранее спасибо.
Поскольку вы используете потоки, они имеют одинаковое адресное пространство. (Который является целым аспектом использования потоков.) Почему бы не использовать, например, блок памяти или связанный список *, защищенный мьютексом * для обмена данными? –
В FIFO существует много производителей-потребителей. Поэтому, хотя, да, я могу создать буфер FIFO и управлять им с помощью мьютекса, я чувствую, что хороший фрагмент этой функциональности уже доступен в очередях сообщений. –