0
我正在測試一些線程代碼,並且使用LinqPad我注意到我能夠從兩個不同的LinqPad選項卡中獲得同名的Mutex。在爲我診斷後,我意識到它只發生在LinqPad中,而不是在普通代碼中。不同的LinqPad選項卡獲取相同的互斥量?
任何幫助它爲什麼會發生? AFAIK LinqPad使用不同的應用程序域來執行每個選項卡,但我不知道應該如何改變任何事情,因爲我使用了一個命名的互斥體。
下面的代碼:
var mutexName = @"Global\TestMutex".Dump();
var createdNew = false;
var mtx = new Mutex(true, mutexName, out createdNew);
(createdNew ? "I own the mutex" : "I don't own the mutex").Dump();
mtx.WaitOne(); // Not really necessary
"I aquired the mutex".Dump();
string.Format("PID: {0} ThreadID: {1} AppDomainID: {2}",
Process.GetCurrentProcess().Id,
AppDomain.GetCurrentThreadId(),
AppDomain.CurrentDomain.Id).Dump();
Util.ReadLine();
這個代碼粘貼成兩個LinqPad標籤,它會始終如一地重現該問題,有時你不得不停止,雖然啓動第二個選項卡。
你檢查了選項嗎?在那裏有一些與回收應用程序域相關的設置。 – 2011-02-08 17:46:18
我不知道這些選項,但我只是檢查它們,它不應該影響結果。除了兩個標籤同時運行,無論Thread或AppDomain如何,它們都不應該一次就能夠獲得同名的互斥體 – Yona 2011-02-08 17:50:53