gpt4 book ai didi

c# - 即使在我释放它之后,Mutex 似乎也没有释放

转载 作者:行者123 更新时间:2023-11-30 12:12:10 32 4
gpt4 key购买 nike

我有许多读取 xml 文件的服务。为了确保没有冲突,我使用了互斥体。无论出于何种原因,如果我的所有服务都由同一用户运行,则没有问题。但是,如果有不同的用户运行这些服务,即使一个服务释放了互斥锁,另一个服务在调用 enter route mutex 时会出现以下异常“未处理的异常:System.TypeInitializationException:'createMutex.Program' 的类型初始值设定项引发了一个异常。---> System.UnauthorizedAccessException:拒绝访问路径“RETEST_MUTEX”。“

    public static readonly String ROUTE_MUTEX_STRING = "RETEST_MUTEX";
private static Mutex _routeMutex = new Mutex(false, ROUTE_MUTEX_STRING);

/// <summary>
/// Thin wrapper around the static routeMutex WaitOne method
/// Always call ExitRouteMutex when done in protected area
/// </summary>
/// <param name="millis_timeout"></param>
/// <returns>true if signaled, like WaitOne</returns>
public static bool EnterRouteMutex(int millis_timeout)
{
try
{
return _routeMutex.WaitOne(millis_timeout, false);
}
catch (AbandonedMutexException ame)
{
// swallow this exception - don't want to depend on other apps being healthy - like pre .NET 2.0 behavior
// data integrity will be checked
return _routeMutex.WaitOne(millis_timeout, false);
}

}

public static void ExitRouteMutex()
{
try
{
_routeMutex.ReleaseMutex();
}
catch (ApplicationException)
{
// swallow, reduce complexity to client
}
}

static void Main(string[] args)
{
Console.WriteLine("Start");
bool get = EnterRouteMutex(1000);
System.Console.WriteLine("Mutex created Press enter " + get.ToString());
Console.ReadLine();
ExitRouteMutex();
Console.WriteLine("Mutex Release");
System.Console.WriteLine("Press enter");
Console.ReadLine();
}

最佳答案

下面是一个跨进程互斥锁的例子。

http://msdn.microsoft.com/en-us/library/c41ybyt3.aspx

它处理 Mutex.OpenExisting 的使用,还演示了 cdhowie 提到的安全方面。

关于c# - 即使在我释放它之后,Mutex 似乎也没有释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046726/

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