使用全域互斥體限制 Golang 執行檔的單一實例
強制執行應用程式的單一實例是常見要求。 Golang 使用sync.Mutex 套件提供了一個方便的解決方案。但是,此方法僅適用於單一進程。要將應用程式限制為跨系統的單一實例,需要利用全域互斥體。
在 Windows 上,kernel32.dll 函式庫提供 CreateMutexW 函式來建立系統範圍的互斥體。此函數需要互斥體有一個唯一的名稱,以便跨進程識別它。
範例:
var ( kernel32 = syscall.NewLazyDLL("kernel32.dll") procCreateMutex = kernel32.NewProc("CreateMutexW") ) func CreateMutex(name string) (uintptr, error) { ret, _, err := procCreateMutex.Call( 0, 0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(name))), ) switch int(err.(syscall.Errno)) { case 0: return ret, nil default: return ret, err } } // mutexName starting with "Global\" will work across all user sessions _, err := CreateMutex("SomeMutexName")
透過在 CreateMutex 中指定以「Global」開頭的名稱,可以跨多個使用者會話存取互斥體。這可確保系統上僅執行應用程式的單一實例。
以上是如何使用全域互斥體確保 Go 應用程式只有一個執行個體在系統範圍內運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!