【问题标题】:what is sync (sync.RWMutex) in golanggolang 中的同步(sync.RWMutex)是什么
【发布时间】:2016-10-23 18:44:31
【问题描述】:

我正在寻找源代码的大猩猩上下文。我不明白它的作用是同步、互斥锁、互斥锁、解锁。当我从源代码中删除 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()
}

【问题讨论】:

    标签: go synchronization mutex


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2012-08-22
      • 2017-09-24
      • 2019-08-27
      • 2010-11-08
      相关资源
      最近更新 更多