전역 뮤텍스를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!