我有以下代码:privatestaticobject_dbLock=newobject();publicstaticvoidLoadData(){lock(_dbLock){//Loaddatafromthedatabase}}publicstaticstringReadData(Guidkey){lock(_dbLock){//Lookupkeyindataandreturnvalue}}我不想让人们在从数据库加载数据时读取数据,因此我在ReadData中放置了一个lock。但是,现在如果多个人同时调用ReadData,一次只能调用一个。有没有一种方法可以允许同时调用ReadData
例如,map访问是这样的:func(pool*fPool)fetch(urlstring)*ResultPromise{pool.cacheLock.RLock()ifrp,pres:=pool.cache[url];pres{pool.cacheLock.RUnlock()returnrp}pool.cacheLock.RUnlock()pool.cacheLock.Lock()ifrp,pres:=pool.cache[url];pres{pool.cacheLock.Unlock()//SkipaddingurlifsomeonesnuckitinbetweenRUnlockan
例如,map访问是这样的:func(pool*fPool)fetch(urlstring)*ResultPromise{pool.cacheLock.RLock()ifrp,pres:=pool.cache[url];pres{pool.cacheLock.RUnlock()returnrp}pool.cacheLock.RUnlock()pool.cacheLock.Lock()ifrp,pres:=pool.cache[url];pres{pool.cacheLock.Unlock()//SkipaddingurlifsomeonesnuckitinbetweenRUnlockan