命名Mutex的Mono替代方案

7
在Windows/.NET上,可以使用命名互斥锁来同步多个进程。不幸的是,在Linux上,Mono并不完全支持此功能。他们的发布说明说Linux不支持这个Windows功能,模拟它会不可靠。似乎最好避免提议的黑客方式来启用它。
那么有哪些替代方案呢?我需要使我的程序能够安全地并发运行,只有其中的一小部分需要与其他实例同步。
该应用程序最终需要在Ubuntu Linux上部署,使用Mono 2.10,但为了测试,如果它也能在Windows 7上使用.NET 4工作,将不胜感激。

你可以编写一个C(或C ++)包装器和粘合代码,将一些Linux同步原语(参见Posix信号量和[sem_overview(7)](http://man7.org/linux/man-pages/man7/sem_overview.7.html)等)与Mono结合使用。 - Basile Starynkevitch
其实我不太懂如何将Mono粘合在一起,我只能用它和C#。而且这也不会是跨平台的。 - ygoe
1个回答

5

更新:
请参考http://aakinshin.net/en/blog/dotnet/namedmutex-on-mono/

旧版:
Mono不支持任何Windows本地IPC。 因此,您不能使用例如命名管道或互斥锁等功能。

但是,为了在同一进程中同步线程,您可以显式地使用Monitor类(它还用于锁定)。

要简单地通知另一个进程,可以尝试使用Unix域套接字。 请查看UnixEndPoint类。 其中之一的好处是您可以为其指定名称(例如,命名信号量的名称)。

此外,您可以尝试使用自己的文件来模拟Mutex。 尝试获取对特定自己的文件的独占访问权限。 只要您拥有该访问权限-您就处于临界区。


2
现在的情况已经大不相同了 - http://aakinshin.net/en/blog/dotnet/namedmutex-on-mono/ - user3791372
可以的,特别是当微软收购了Xamarin并想推广.Net Core时。我会更新答案并提供链接给你。 - Maxim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接