首页 > 文章列表 > Golang中创建命名互斥体的方法是什么?

Golang中创建命名互斥体的方法是什么?

322 2024-03-30
问题内容

我对 golang 相当陌生,正在尝试创建一个命名互斥体。我正在尝试复制:

hMutex = CreateMutex( 
    NULL,                        // default security descriptor
    FALSE,                       // mutex not owned
    TEXT("NameOfMutexObject"));  // object name

我在同步中看到的示例似乎并未说明命名互斥体。


正确答案


这是使用同步的命名互斥体的示例 - 这是您正在寻找的吗?

package main

import (
    "fmt"
    "sync"
)

var mutexMap sync.Map

func createMutex(name string) *sync.Mutex {
    mutex, ok := mutexMap.Load(name)
    if !ok {
        newMutex := &sync.Mutex{}
        mutex, _ = mutexMap.LoadOrStore(name, newMutex)
    }
    return mutex.(*sync.Mutex)
}

func main() {
    hMutex := createMutex("NameOfMutexObject")
    hMutex.Lock()
    fmt.Println("Locked Mutex: NameOfMutexObject")
    hMutex.Unlock()
    fmt.Println("Unlocked Mutex: NameOfMutexObject")
}