Потребителю необходимо заблокировать блокировку, чтобы предотвратить добавление источника в файл до того, как читатель сможет прочитать. Представьте себе этот сценарий:
Producer writes and signals
Consumer receives signal
Consumer opens the file
Producer fires again and writes another 10 bytes
Producer signals
Consumer reads the last 10 bytes
Consumer closes the file
Что произойдет дальше, зависит от того, является ли указанное событие событием ручного сброса или автоматического сброса. Если это автоматический сброс, то Потребитель увидит второй сигнал и вернется и снова прочитает то же самое. Если это ручной сброс, то Потребитель собирается сбросить событие и пропустить последнее, что написал Производитель.
Обратите внимание, что даже с блокировкой у вас есть состояние гонки, если производитель может ответить достаточно быстро. То есть, продюсер может поместить в файл вторую запись, прежде чем потребитель сможет прочитать первую.
Похоже, что у вас есть очередь FIFO, реализованная в файле, и вы зависите от способности потребителя обрабатывать данные быстрее, чем его может создать создатель. Если вы можете гарантировать такое поведение, тогда все в порядке. В противном случае Потребитель должен будет отслеживать, где он последний раз читал, чтобы он знал, где ему следует читать дальше.