golang中的sync(sync.RWMutex)是什么

golang中的sync(sync.RWMutex)是什么,go,synchronization,mutex,Go,Synchronization,Mutex,我正在寻找源代码的gorilla上下文。我不明白它到底做什么同步,互斥锁,互斥锁,解锁。当我从源代码中删除mutex.Lock和mutex.Unlock时,它仍然在运行 import ( "net/http" "sync" "time" ) var ( mutex sync.RWMutex data = make(map[*http.Request]map[interface{}]interface{}) datat = make(map[*h

我正在寻找源代码的gorilla上下文。我不明白它到底做什么同步,互斥锁,互斥锁,解锁。当我从源代码中删除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的上下文通过映射将数据结构相互关联,但是

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


但是,由于RWMutex允许共享并发访问,通过拆分两个访问角色从映射中读取数据,因此在任何时间点都没有储物柜、单个写储物柜,或者一个或多个当前持有互斥锁的读储存器。

Gorrila的上下文通过映射将数据结构彼此关联,但是

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

但是,由于RWMutex允许共享并发访问,通过拆分两个访问角色从映射中读取数据,因此在任何时间点都没有锁存器、单个写锁存器或一个或多个读取锁存器当前持有互斥锁存器