Ian Griffiths 寫了不少關於 .NET multi-thread programming 的文章:
《What Locks Are You Holding Right Now?》 解釋了 deadlock 發生的時機,以及兩個常用的規則來避免之:
- avoid blocking the UI thread.
- avoid making other threads wait for the UI thread to do something.
《Monitor.TryEnter, lock, using, and Deadlock》解釋如何用 using 語法來實作限時的等待。類似的手法也可以應用在 ReaderWriterLock。(參考 Stupid “using” Tricks)
《ReaderWriterLock vs Monitor》解釋了為什麼使用 ReaderWriterLock 通常是一種過早的最佳化 (premature optimization)。
《Locking, Anonymous Delegates, and Interrupts》說明了一般同步機制所使用的 “acquire, do, release” 模式的缺點,也順帶點出 KeSynchronizeExecution 存在的原因。
《When Synchronous Locking Goes Bad》是前一篇的延續,點出另一個 “acquire, do, release” 不適用的時機,以及 ISynchronizeInvoke 模式如何弭補這缺陷。簡而言之,ISynchronizeInvoke 是個比 “acquire, do, release” 更抽象、適用範圍更廣的同步模式。
《How To Stop a Thread in .NET》解釋了如何正確地停止一個 thread 以及為何 Thread.Abort 是邪惡的。
《Doing Work Without Threads 》解釋了如何應用一些非同步呼叫來避免不必要的 thread 創建。
《Thread IDs and .NET》解釋 logic thread 跟 physical thread 的不同,並說明如何識別某一個特定的 thread。