* nix Общесистемные потоки и процессы mutex - PullRequest
2 голосов
/ 05 июля 2010

У меня есть некоторый ресурс, который я хотел бы защитить от одновременного использования как потоками в одном процессе, так и между разными процессами.Каков «правильный» способ сделать это в * nix?

Например, мы хотим записать файл из многопоточного приложения, которое время от времени разветвляет некоторые подпроцессы.Как обеспечить, чтобы каждый поток имел эксклюзивный доступ к файлу в течение некоторого времени?Я ищу общий ответ, а не тот, который работает только для записи в файл, так как это также может быть сегмент общей памяти и т. Д.

Ответы [ 2 ]

1 голос
/ 05 июля 2010

Слишком общий вопрос, следовательно, общий ответ.

Наиболее гибким средством синхронизации, вероятно, будут семафоры POSIX .Существует также старый и громоздкий семафорный механизм SysV IPC , который вам, возможно, придется использовать вместо этого в зависимости от поддержки платформы.

Возможно, вы также захотите изучить атрибуты блокировки PTHREAD чтобы узнать, поддерживает ли ваша платформа общую семантику.

0 голосов
/ 05 июля 2010

Если ресурс глобальный и требуется общий доступ, вы должны использовать блокировки. Если это локальный поток, используйте локальное хранилище потока. Если он может быть локальным, используйте локальный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...