>백엔드 개발 >Golang >글로벌 뮤텍스를 사용하여 Go 애플리케이션의 인스턴스 하나만 시스템 전체에서 실행되도록 하는 방법은 무엇입니까?

글로벌 뮤텍스를 사용하여 Go 애플리케이션의 인스턴스 하나만 시스템 전체에서 실행되도록 하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-30 05:32:25646검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.