ホームページ >バックエンド開発 >Golang >グローバル ミューテックスを使用して、Go アプリケーションの 1 つのインスタンスだけがシステム全体で実行されるようにするにはどうすればよいですか?

グローバル ミューテックスを使用して、Go アプリケーションの 1 つのインスタンスだけがシステム全体で実行されるようにするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-30 05:32:25643ブラウズ

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」で始まる名前を指定すると、ミューテックスには、複数のユーザー セッション間でアクセスできます。これにより、システム上でアプリケーションのインスタンスが 1 つだけ実行されることが保証されます。

以上がグローバル ミューテックスを使用して、Go アプリケーションの 1 つのインスタンスだけがシステム全体で実行されるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。