首頁 > 後端開發 > Golang > 如何使用全域互斥體確保 Go 應用程式只有一個執行個體在系統範圍內運作?

如何使用全域互斥體確保 Go 應用程式只有一個執行個體在系統範圍內運作?

Linda Hamilton
發布: 2024-11-30 05:32:25
原創
571 人瀏覽過

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

使用全域互斥體限制 Golang 執行檔的單一實例

強制執行應用程式的單一實例是常見要求。 Golang 使用sync.Mutex 套件提供了一個方便的解決方案。但是,此方法僅適用於單一進程。要將應用程式限制為跨系統的單一實例,需要利用全域互斥體。

在 Windows 上,kernel32.dll 函式庫提供 CreateMutexW 函式來建立系統範圍的互斥體。此函數需要互斥體有一個唯一的名稱,以便跨進程識別它。

範例:

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")
登入後複製

透過在 CreateMutex 中指定以「Global」開頭的名稱,可以跨多個使用者會話存取互斥體。這可確保系統上僅執行應用程式的單一實例。

以上是如何使用全域互斥體確保 Go 應用程式只有一個執行個體在系統範圍內運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板