Нужен ли семафор, когда один процесс пишет, а другой читает?

1

У меня есть два процесса с именем A и B (два exe файла: A.exe и B.exe), реализованные в С#. Процесс B вызывается процессом A. В A объект сериализуется в двоичный файл с помощью интерфейса ISerializable. Это происходит каждые несколько миллисекунд. Процесс B десериализует этот объект (также каждые несколько миллисекунд).

Мне интересно, нужен ли мне Семафор, когда один процесс читает из файла, а другой пишет. Возможно ли, что B пытается прочитать двоичный файл, а A еще не закончил писать?

Теги:
serialization
semaphore
ipc

1 ответ

1
Лучший ответ

Если запись является атомной, означает, что этот процесс B может видеть только новые данные после того, как он был полностью написан (и в противном случае видит только старые данные), тогда вам не нужна синхронизация (семафоры и т.д.). Обычно это происходит, когда у вас есть потоки, и записывает байт (запись байта будет атомарным) в память, которая должна быть разделена.

В вашем случае вы сериализуете целый объект в файл, который определенно не является атомарным. В этом случае потребуется некоторая синхронизация между этими двумя процессами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню