首頁  >  文章  >  後端開發  >  如何確保 Golang 可執行檔的單一執行個體在 Windows 上執行?

如何確保 Golang 可執行檔的單一執行個體在 Windows 上執行?

DDD
DDD原創
2024-11-27 08:09:10144瀏覽

How to Ensure a Single Instance of a Golang Executable Runs on Windows?

確保Golang 可執行檔在Windows 上單一實例執行

為了防止可執行檔的多個執行個體同時執行,實作全域互通斥機制是不可或缺的。以下是在Windows 機器上用Golang 實現此目的的解決方案:

利用全域互斥體:

此解決方案涉及使用Windows 中的CreateMutex 函數建立全域互斥體核心。可以跨不同的使用者會話存取全域互斥體,確保一次只能執行一個可執行檔實例。

程式碼範例:

以下Go 程式碼示範如何建立一個全域互斥體:

import (
    "syscall"
    "unsafe"
)

// CreateMutex creates a global mutex.
func CreateMutex(name string) (uintptr, error) {
    kernel32 := syscall.NewLazyDLL("kernel32.dll")
    procCreateMutex := kernel32.NewProc("CreateMutexW")

    ret, _, err := procCreateMutex.Call(
        0,
        0,
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(name))),
    )
    if int(err.(syscall.Errno)) == 0 {
        return ret, nil
    }

    return ret, err
}

// SampleMutexName provides an example of creating a global mutex.
func SampleMutexName() {
    _, err := CreateMutex("Global\MyMutexName")
    if err != nil {
        // Handle error
    }
}

結論:

結論: 透過建立全域互斥體,您可以確保在任何給定時間只有一個Golang可執行檔實例正在運行。此方案有效防止多個執行個體不必要地消耗系統資源。

以上是如何確保 Golang 可執行檔的單一執行個體在 Windows 上執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn