Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Memastikan Hanya Satu Contoh Go Executable Berjalan pada Windows?

Bagaimanakah Saya Boleh Memastikan Hanya Satu Contoh Go Executable Berjalan pada Windows?

Barbara Streisand
Lepaskan: 2024-11-27 09:24:15
asal
463 orang telah melayarinya

How Can I Ensure Only One Instance of a Go Executable Runs on Windows?

Menghadkan kepada Satu Instance of Executable in Go for Windows

Memastikan hanya satu contoh executable berjalan pada satu masa adalah penting untuk menghalang berbilang kejadian program yang sama daripada menggunakan sumber sistem atau mewujudkan konflik. Artikel ini meneroka cara untuk mencapai pelaksanaan satu contoh dalam sistem Golang untuk Windows menggunakan Global Mutex.

Global Mutex for Single-Instance Control

Mutex global ialah primitif penyegerakan yang membenarkan berbilang proses atau benang untuk berkongsi akses kepada sumber yang dikongsi dengan menghalang akses serentak. Dalam kes ini, menggunakan mutex global bernama "SomeMutexName" merentas semua sesi pengguna memastikan bahawa hanya satu contoh boleh laku boleh dijalankan.

Pelaksanaan Kod

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
    }
}

func main() {
    _, err := CreateMutex("Global\SomeMutexName")
    if err != nil {
        return
    }
}
Salin selepas log masuk

Seni Bina Penyelesaian

Kod ini memulakan fungsi API Windows "CreateMutexW" daripada Pustaka "kernel32.dll" menggunakan pakej syscall. Ia kemudian memanggil fungsi ini dengan nama mutex global untuk mencipta mutex bernama. Jika fungsi kembali tanpa ralat, ia menunjukkan bahawa tiada contoh lain bagi larian boleh laku. Jika tidak, ini bermakna contoh lain sudah berjalan.

Kemudahalihan ke Platform Lain

Walaupun kod yang diberikan menangani isu khusus ini untuk mesin Windows, perlu diingat bahawa teknik Global Mutex tidak mudah alih merentasi semua platform. Setiap platform mempunyai mekanisme tersendiri untuk melaksanakan penguncian contoh. Contohnya, pada sistem seperti Unix, pendekatan "fail kunci" atau fungsi "fcntl" dengan "F_SETLK" boleh digunakan untuk mencapai kefungsian yang serupa.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Hanya Satu Contoh Go Executable Berjalan pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan