グローバル ミューテックスを使用した 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」で始まる名前を指定すると、ミューテックスには、複数のユーザー セッション間でアクセスできます。これにより、システム上でアプリケーションのインスタンスが 1 つだけ実行されることが保証されます。
以上がグローバル ミューテックスを使用して、Go アプリケーションの 1 つのインスタンスだけがシステム全体で実行されるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。