Heim > Backend-Entwicklung > Golang > Wie kann mithilfe eines globalen Mutex sichergestellt werden, dass nur eine Instanz einer Go-Anwendung systemweit ausgeführt wird?

Wie kann mithilfe eines globalen Mutex sichergestellt werden, dass nur eine Instanz einer Go-Anwendung systemweit ausgeführt wird?

Linda Hamilton
Freigeben: 2024-11-30 05:32:25
Original
567 Leute haben es durchsucht

How to Ensure Only One Instance of a Go Application Runs System-Wide Using a Global Mutex?

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")
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage