我有两个名为 A 和 B 的进程(两个exe文件: A.exe 和 B.exe )都是用C#实现的。 流程 B 由流程 A 调用。 在 A 中,使用ISerializable接口将对象序列化为二进制文件。这种情况每隔几毫秒发生一次。 进程 B 反序列化此对象(也是每隔几毫秒)。
我想知道当一个进程从一个文件读取而另一个进程是否写入时我是否需要一个信号量。 B 是否有可能尝试读取二进制文件,而 A 还没有写完?
答案 0 :(得分:1)
如果写入是原子的,意味着进程B只能 在完全写入后看到新数据(否则只看到旧数据),那么就不需要同步(信号量)等等。)。当你有线程并且正在写一个字节(写一个字节将是原子的)到要共享的内存时,通常就是这种情况。
在您的情况下,您将整个对象序列化为绝对不是原子的文件。在这种情况下,需要在两个进程之间进行一些同步。