Вы должны использовать файл консультативную блокировку . В Unix это flock
, в Windows LockFile
.
Однако тот факт, что ваш процесс чтение содержит ошибки, вероятно, указывает на то, что вы не открывали файл в режиме только для чтения в этом процессе. Вы должны указать правильные флаги для доступа только для чтения, или с точки зрения ОС у вас есть два писателя.
Обе операционные системы поддерживают блокировки чтения-записи, когда разрешено неограниченное количество читателей, но только при отсутствии пишущих, и только самое большее один писатель за раз будет иметь доступ.
Поскольку вы говорите, что ваша система является многопоточным процессом (т. Е. Не многопоточным thread ), вы не можете использовать условную переменную (если она не находится в разделяемой памяти между процессами). Вы также не можете использовать одного писателя в качестве координатора, если не хотите передавать туда свои данные через сокеты или общую память.