在Windows / .NET上,可以使用命名的Mutex来同步多个进程。不幸的是,Mono并不完全支持Linux。他们的release notes说Linux不支持这个Windows功能,并且模拟它是不可靠的。无论如何,最好避免建议的黑客攻击。
那么建议的替代方案是什么?我需要让我的程序安全地同时运行,只需要将其中的一小部分与其他实例同步。
最终需要将应用程序部署在带有Mono 2.10的Ubuntu Linux上,但是对于测试,如果它也可以在带有.NET 4的Windows 7上运行,那将非常受欢迎。
答案 0 :(得分:5)
<强>更新强>
试着看看http://aakinshin.net/en/blog/dotnet/namedmutex-on-mono/
<强> OLD:强>
Mono不支持任何Windows原生IPC。
所以你没有例如命名管道或互斥锁。
但是在同一过程中同步线程,您可以明确使用Monitor class(它也用于锁定)。
要简单通知其他流程,您可以尝试使用Unix Domain Sockets 检查UnixEndPoint类。您可以为其指定名称的一个好处(例如,对于命名的信号量)。
您也可以尝试使用自己的文件模拟Mutex 。尝试获取对特定自己文件的独占访问权限。虽然您有访问权限 - 但您处于关键部分。