gpt4 book ai didi

go - 什么是 golang 中的同步(sync.RWMutex)

转载 作者:IT王子 更新时间:2023-10-29 02:33:04 37 4
gpt4 key购买 nike

我正在寻找源代码的 gorilla 上下文。我不明白它究竟是做什么的 sync,mutex.Lock, mutex.Unlock。当我从源代码中删除 mutex.Lock 和 Mutex.Unlock 时它仍在运行。

import (
"net/http"
"sync"
"time"
)

var (
mutex sync.RWMutex
data = make(map[*http.Request]map[interface{}]interface{})
datat = make(map[*http.Request]int64)
)

// Set stores a value for a given key in a given request.
func Set(r *http.Request, key, val interface{}) {
mutex.Lock()
if data[r] == nil {
data[r] = make(map[interface{}]interface{})
datat[r] = time.Now().Unix()
}
data[r][key] = val
mutex.Unlock()
}

最佳答案

Gorrila 的上下文通过映射将数据结构相互关联,但是 maps are not safe for concurrent use in go .

为了允许多个 goroutine 安全地访问同一个 map ,互斥锁用于确保在任何给定时间只有一个 goro 具有对 map 的写访问权限。

但是,由于 maps are safe for concurrent reads in go ,RWMutex 允许通过拆分两个访问角色来共享并发访问以从 map 读取数据,因此在任何时间点都没有锁柜,一个写锁柜,或者一个或多个当前持有互斥锁的读锁柜。

关于go - 什么是 golang 中的同步(sync.RWMutex),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206561/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com