C++: блокировка файлов между потоками и процессами

Я хотел бы создать блокировку на основе файлов, которая обеспечивает эксклюзивный доступ к связанному ресурсу. boost:interprocess::file_lock подходит для разделения процессов, но не подходит для разделения потоков. Эту проблему можно решить с помощью дополнительного boost::recursive_mutex, если мы извлечем имена файлов в уникальные полные пути (например, без относительно определенных файлов блокировки, таких как something/x.lock) и свяжем с ними мьютексы.

Я хотел бы иметь более простой и относительно стандартный способ блокировки файлов, который работает как для потоков, так и для процессов.


person Notinlist    schedule 25.06.2013    source источник


Ответы (1)


Вместо этого используйте recursive_named_mutex. Работает как в процессах, так и в потоках. Это намного дешевле и менее подвержено ошибкам.

person Hans Passant    schedule 02.07.2013
comment
Есть ли ограничения на длину/содержание имени? Где обычно хранятся эти мьютексы? (Я знаю, что дело в том, что мне не нужно знать) - person Notinlist; 04.07.2013
comment
Это детали реализации операционной системы. Вы не указали свою ОС. Вы можете просто посмотреть код повышения, если хотите узнать. - person Hans Passant; 04.07.2013
comment
Почему вы предлагаете рекурсивный мьютекс вместо обычного нерекурсивного? - person shi; 03.12.2015