【发布时间】:2014-05-20 13:54:44
【问题描述】:
我有两个名为 A 和 B 的进程(两个 exe 文件:A.exe 和 B.exe em>) 都用 C# 实现。 进程 B 由进程 A 调用。 在 A 中,使用 ISerializable 接口将对象序列化为二进制文件。这每隔几毫秒就会发生一次。 进程 B 反序列化此对象(也是每隔几毫秒)。
我想知道当一个进程读取文件而另一个进程写入时是否需要信号量。是否有可能 B 尝试读取二进制文件,而 A 尚未完成写入?
【问题讨论】:
-
是的,您需要同步对文件的访问。但这是一种非常奇怪的交流方式(文件)。考虑使用 WCF 服务 - 它会自动将序列化数据从一个进程传递到另一个进程,而无需同步。如果写入和读取之间应该有延迟,您可以使用 WCF 服务的 MSMQ 绑定,它将存储请求直到可以处理为止。
-
IMO Global Mutex 会比 Semaphore 更合适。
-
我同意使用文件进行通信有点奇怪。您需要为此使用全局信号量/互斥量/其他同步。如果你想使用文件 IO,也许命名管道会更好,不需要磁盘上的实际文件吗?
-
如前所述,
Mutex将是 IPC 的正确选择。您必须实现非常简单的 Busy/Ready 逻辑或使用多个互斥锁以使其更具抵抗力和灵活性。 -
使用文件以毫秒速率进行互操作不是一个好主意。至少使用命名管道或套接字,您可以免费获得同步。
标签: c# serialization ipc semaphore