2010-01-03 25 views

回答

14

你想要使用goroutines並通過channels同步訪問你的地圖。從the FAQ說明:

長時間的討論後,決定將一般使用的地圖做了 並不需要從多個線程安全的訪問,在這些情況下 在那裏做,地圖可能是一些較大的部分數據結構 或已經同步的計算。因此要求所有的地圖操作都搶到一個互斥鎖會減慢大多數程序的執行速度,並且增加安全性。這不是一個容易的決定,但是,因爲這意味着 不受控制的地圖訪問可能會導致程序崩潰。

該語言不排除原子圖更新。當需要時,這樣的 就像託管一個不受信任的程序一樣,實現可能會有 互鎖地圖訪問。

+0

這是明智的,但他們仍應記錄和維護哪些函數是線程安全的。通常我會遇到代碼,在pass1中我使用值填充地圖,而在pass2中,我從多個不同的線程同時讀取它,而沒有進行單一同步。 – Lothar 2010-01-04 23:11:43

+0

圍棋風格似乎非常強大,反對使用共享可變狀態。如果你只是從不同的線程閱讀地圖,你應該沒問題。 (雖然這不是絕對不言而喻;有邏輯讀取發生物理變化的似是而非的地圖實現...) – poolie 2010-11-19 02:49:57