2008-12-11 25 views

回答

1

如果將所有代碼都散佈在實際必須閱讀的代碼中,那可能是一個問題。爲什麼它首先經常出現?該功能是否可以封裝在別的地方?

從根本上來說,Wait/Pulse沒有什麼問題 - 但是就像生活中的其他事情一樣,如果使用不當,它會成爲一個問題。不管你的使用是否不恰當,很難說沒有看到代碼:(

-1

聽起來像是應該用注入編碼作爲一個方面。但是,我對C#中AOP的支持的知識是微不足道的,所以我不能提供任何超過該

0

我真的建議反對這種做法 - 從MSDN頁面上PulseEvent:

等待同步對象的線程可以從等待狀態被暫時移除由內核模式的APC執行,然後在APC完成後返回等待狀態。如果在線程已經執行期間發生對PulseEvent的調用從等待狀態中刪除,線程將不會被釋放,因爲PulseEvent只釋放那些正在等待調用的線程。因此,PulseEvent不可靠,不應該被新應用程序使用。相反,使用條件變量。

現在,Monitor.Pulse可能會使用PulseEvent以外的其他語言編寫,但是整個概念很有缺陷 - 正確使用鎖定和條件變量。

+0

Pulse沒有這個問題。整個概念*沒有缺陷,並且相當於Java已經安全地使用了多年。 – 2008-12-11 17:35:07

相關問題