Maison > développement back-end > Golang > le corps du texte

Comment puis-je m'assurer qu'une seule instance de mon application Go s'exécute sous Windows ?

Mary-Kate Olsen
Libérer: 2024-11-28 02:12:14
original
819 Les gens l'ont consulté

How Can I Ensure Only One Instance of My Go Application Runs on Windows?

Réaliser un exécutable à instance unique avec Golang sous Windows

L'exécution de plusieurs instances d'un exécutable peut entraîner des comportements inattendus et des conflits de ressources. Pour éviter cela, vous souhaiterez peut-être limiter votre application Golang à une seule instance active.

Utilisation de Global Mutex pour le contrôle d'instance

Une approche courante pour appliquer l'exécution d'une seule instance se fait grâce à l’utilisation d’un mutex global. Un mutex, ou objet d'exclusion mutuelle, permet à un seul processus d'obtenir un accès exclusif à une ressource partagée à un moment donné. Dans ce cas, notre ressource partagée est l'exécutable en cours d'exécution.

Implémentation sous Windows

Pour créer un mutex global dans Golang pour Windows, vous pouvez utiliser le Fonction CreateMutexW fournie par le kernel32.dll. Cette fonction prend plusieurs arguments, dont le nom du mutex. Pour la compatibilité des sessions entre utilisateurs, il est recommandé de préfixer le nom du mutex avec "Global".

Dans l'extrait de code fourni, une fonction appelée CreateMutex est définie qui résume le CreateMutexW fonction. Vous pouvez utiliser cette fonction pour créer un mutex global en passant un nom unique, tel que "SomeMutexName".

Voici l'extrait de code modifié :

import (
    "syscall"
    "unsafe"
)

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 créant et en définissant un mutex global , votre application Golang peut garantir qu'une seule instance est exécutée à la fois. Si une autre instance tente de s'exécuter, elle sera bloquée jusqu'à ce que l'instance initiale se termine, limitant ainsi l'exécutable à une seule instance active.

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