Maison > développement back-end > Golang > Comment garantir qu'une seule instance d'une application Go s'exécute à l'échelle du système à l'aide d'un mutex global ?

Comment garantir qu'une seule instance d'une application Go s'exécute à l'échelle du système à l'aide d'un mutex global ?

Linda Hamilton
Libérer: 2024-11-30 05:32:25
original
637 Les gens l'ont consulté

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

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")
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal