所以目前我在編寫「正確的」golang時遇到了一個非常現實的問題。我有一個對象(爲了簡單起見,我們可以把它看作一個map [string]字符串),我希望它在多個gortuines之間保持「共享」狀態。有沒有使用消息建模共享狀態的方法?
目前的實施是這樣的:
//Inside shared_state.go
var sharedMap map[string]string = make(map[string]string)
var mutex sync.RWMutex = sync.RWMutex{}
func Add(k string, v string) bool {
mutex.Lock()
if _, exists := sharedMap[k]; exists {
mutex.Unlock()
return false
}
tokenMap[k] = v
mutex.Unlock()
return true
}
//Other methods to access, modify... etc
雖然這確實做的工作是相當難看實現由GO標準,鼓勵利用信息建模併發。
有沒有簡單的方法來使用我公然不知道的消息建模共享狀態?或者我是否被迫在這種情況下使用互斥體?
如果您只需共享一個資源,那麼使用互斥鎖是首選方式。在這種情況下,消息傳遞在我看來並沒有什麼意義。 – squiguy