Restriction à une seule instance de l'exécutable Golang avec Global Mutex
Il est courant d'appliquer une seule instance d'une application. Golang fournit une solution pratique en utilisant le package sync.Mutex. Cependant, cette méthode ne fonctionne qu’au sein d’un seul processus. Pour restreindre l'application à une seule instance sur le système, il est nécessaire d'exploiter un mutex global.
Sous Windows, la bibliothèque kernel32.dll propose la fonction CreateMutexW pour créer un mutex à l'échelle du système. Cette fonction nécessite un nom unique pour le mutex afin de l'identifier à travers les processus.
Exemple :
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")
En spécifiant un nom commençant par « Global » dans CreateMutex, le mutex est accessible sur plusieurs sessions utilisateur. Cela garantit qu'une seule instance de l'application est exécutée sur le système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!