我读过有关mutex
的信息,这些信息由线程拥有,并且只能由拥有的线程使用。在this answer中,该解决方案建议每个进程在发出互斥信号之前,必须拥有互斥锁的所有权。我必须在这里承认自己的愚蠢,不知道如何在IPC中使用事件,因为在我阅读MSDN时没有弹出事件,我喜欢唯一命名的mutex
作为解决方案,但我什至不知道如何在WindowsService和常规过程之间转移所有权。请帮忙。
我可以补充一下吗,乔恩·斯凯特(Jon Skeet)的教程here告诉我,要在不同用户之间进行通信(就像我想的LocalSystem
一样),需要在mutex
名称前加上“Global \”前缀。我在.NET文档中找不到任何提及,我想他是对的,而且我必须比MSDN系统更重视MSDN系统。
最佳答案
要获得已经存在的Mutex的所有权,可以将静态方法Mutex.OpenExisting()与MutexRights = TakeOwnership一起使用
public static Mutex OpenExisting(
string name,
MutexRights rights)
考虑到OpenExisting()可能引发UnauthorizedAccessException异常,我建议使用以下构造函数创建一个新的Mutex:
public Mutex(
bool initiallyOwned,
string name,
out bool createdNew
)
然后通过分析
createdNew
变量的值,您可以检查是否已经存在mutext或已创建新的mutext。
关于.net - 转移.NET互斥锁的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798166/