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

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

Linda Hamilton
풀어 주다: 2024-11-30 05:32:25
원래의
568명이 탐색했습니다.

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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿