我有一個創建互斥鎖,並立即取得所有權,然後單擊按鈕時,它會釋放一個它的過程:C#互斥總是停留在WaitOne的
Mutex req_mutex = new Mutex(true, "req_mutex");
...
req_mutex.WaitOne(); // not required for first click
req_mutex.ReleaseMutex();
其他進程進行循環並檢查是否存在互斥,當它等待它被釋放:
bool waitingForReqMutexCreation = true;
while (waitingForReqMutexCreation)
{
try
{
req_mutex = Mutex.OpenExisting("req_mutex", MutexRights.Synchronize);
waitingForReqMutexCreation = false;
}
catch (WaitHandleCannotBeOpenedException)
{
Thread.Sleep(1000);
}
}
...
req_mutex.WaitOne(); // wait for new request *********** problem here *********
req_mem.readFile(); // read request
req_mutex.ReleaseMutex(); // release req mutex for more requests
問題是互斥本來應該由按鈕,在第一過程中釋放後連的WaitOne不會繼續。
有沒有人有一個想法,爲什麼這可能是?
切勿在循環中調用ReleaseMutex。如果您無法確切知道釋放互斥鎖的次數,那麼您的應用程序設計不佳。正如其他人所指出的,互斥體最初不應該是自己的。或者,您應該在初始化完成後釋放它。 **無論如何,你現在應該在做什麼。**多線程並不是你可以猜測的東西。如果你做錯了,你的應用程序不會像預期的那樣工作。 – Phil1970