編程是一種技術,也是一種藝術
2007年8月19日
今天整理代碼的時候,發現一個比較有趣的地方。衆所周知,在多綫程存取的時候需要一些同步的機制。.net 提供了幾种不同的方式:Monitor (即 lock 關鍵詞),Interlocked 原子操作,以及 Mutex 等。而在同步操作相對簡單的情況下,我是比較傾向于使用 Interlocked,原因是其性能非常好。在我的代碼中,有一個性能計數器。因爲項目挺多,所以我使用了一個 int[] 數組儲存計量。問題是,當時因爲不清楚 Interlocked 與 Array 的兼容性,我使用了 ReaderWriterLock 進行同步處理。例如:
很明顯,這是一個比較愚蠢的方式……後來,在查閲 IL 的時候,發現 Interlocked.Increment 方法,需要一個 ref 參數,而 Array 的 IL 中,就有一個 ldelema 的操作碼。所以,Interlockded 與 Array 是互相兼容的。因此,上面的代碼其實可以寫成:
就可以了。而且性能上要好很多。
posted @ 2007-08-19 16:25 夏子乂 阅读(72) | 评论(0) | 编辑