Beschränkung auf eine einzelne Instanz der ausführbaren Golang-Datei mit globalem Mutex
Es ist eine häufige Anforderung, eine einzelne Instanz einer Anwendung zu erzwingen. Golang bietet eine praktische Lösung mit dem sync.Mutex-Paket. Diese Methode funktioniert jedoch nur innerhalb eines einzelnen Prozesses. Um die Anwendung auf eine einzelne Instanz im gesamten System zu beschränken, ist die Nutzung eines globalen Mutex erforderlich.
Unter Windows bietet die Bibliothek kernel32.dll die Funktion „CreateMutexW“ zum Erstellen eines systemweiten Mutex. Diese Funktion erfordert einen eindeutigen Namen für den Mutex, um ihn prozessübergreifend zu identifizieren.
Beispiel:
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")
Durch Angabe eines Namens, der mit „Global“ in CreateMutex beginnt, Auf den Mutex kann über mehrere Benutzersitzungen hinweg zugegriffen werden. Dadurch wird sichergestellt, dass nur eine einzige Instanz der Anwendung auf dem System ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWie kann mithilfe eines globalen Mutex sichergestellt werden, dass nur eine Instanz einer Go-Anwendung systemweit ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!