gpt4 book ai didi

.net - 转移.NET互斥锁的所有权

转载 作者:行者123 更新时间:2023-12-02 04:05:43 30 4
gpt4 key购买 nike

我读过有关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)
  • 权限参数必须包含MutexRights.Synchronize标志以允许线程等待互斥体,并包含MutexRights.Modify标志以允许它们调用ReleaseMutex()方法。
  • OpenExisting方法尝试打开现有的已命名互斥锁。如果系统互斥锁不存在,则此方法将引发异常,而不是创建系统对象。

  • 考虑到OpenExisting()可能引发 UnauthorizedAccessException异常,我建议使用以下构造函数创建一个新的Mutex:
    public Mutex(
    bool initiallyOwned,
    string name,
    out bool createdNew
    )

    然后通过分析 createdNew变量的值,您可以检查是否已经存在mutext或已创建新的mutext。

    关于.net - 转移.NET互斥锁的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798166/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com