#c #multithreading #process
#c #многопоточность #процесс
Вопрос:
Привет всем, я хочу задать вопрос о функции flockfile Я читал описание и узнал, что она используется в потоках. но я делаю разветвление, что означает, что будут разные процессы, а не потоки. могу ли я использовать flockfile с другим процессом, имеет ли это какое-либо значение?
Спасибо
Ответ №1:
flockfile
Функция блокирует не файл, а структуру FILE
данных, которую процесс использует для доступа к файлу. Итак, речь идет о представлении файла в адресном пространстве, которое имеет процесс, не обязательно о самом файле.
Даже в процессе, если у вас FILE
открыты разные файлы в одном файле, вы можете одновременно выполнять запись в этот файл, даже если вы заблокировали каждый из файлов FILE
с помощью flockfile
.
Для блокировки самого файла ознакомьтесь с flock
и lockf
, но помните, что правила их воздействия на доступ к файлам через разные потоки одного и того же процесса сложны.
Ответ №2:
Эти функции могут использоваться только в рамках одного процесса.
Из документов POSIX:
Таким образом, потоки, совместно использующие потоки stdio с другими потоками, могут использовать flockfile() и funlockfile(), чтобы связывать последовательности операций ввода-вывода, выполняемых одним потоком.
Вся остальная часть этой страницы рассказывает о взаимном исключении между потоками. Разные процессы будут иметь разные буферы ввода / вывода для файловых потоков, эта блокировка не будет иметь смысла / быть эффективной.