在前篇這樣的兩個應用程式的撰寫在 Windows 上執行時是可以順利完成所需的要求。
但一旦放到 "非 Windows" 上的環境執行時,卻發生了異狀:
應用程式 A 居然找不到應用程式 B 所建立的 Mutex。
發生了執行 30 次(每次等待 1 秒後再找) 後,直接結束應用程式 A 的情況。

難道???
看看 Mutex 類別的備註 中的 Note:
On a server that is running Terminal Services, a named system mutex can have two levels of visibility. If its name begins with the prefix Global\, the mutex is visible in all terminal server sessions.。
所以如果在 Mutex 的名稱前綴詞加上 "Global\" 時就可以在系統中的所有 Session 中看到囉?
應用程式 A 改變第一列的 mutexName 變數指定為 "Global\\TheMutexTest"。(C# 的 "\" 在字串中需寫為 "\\")
var mutexName = "Global\\TheMutexTest";應用程式 B 改變第一列的 mutexName 變數指定為 "Global\\TheMutexTest"。(C# 的 "\" 在字串中需寫為 "\\")
var mutexName = "Global\\TheMutexTest";
再重新佈署 應用程式 A、B 到該 WSL 的 Ubuntu 底下,對照執行一次:

一切的亂源就是使用說明沒看完整…
追查的過程當中當然也少不了問問 ChatGPT:

所以,當要把 Windows 上的程式移植到 Linux 或 macOS 時,使用 Mutex 時請注意。
I'm a Microsoft MVP - Developer Technologies (From 2015 ~).

I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.
If you want to know more about them, welcome to my website:
https://jamestsai.tw
本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。