請參閱從StreamWriter
class specification採取以下警告:是MSDN引用system.thread,工作線程,I/O線程還是全部三個?
「任何公共static這種類型的成員(在Visual Basic中的Shared)都是線程安全的所有實例成員不能保證是線程安全的。」
我知道一個W3WC進程包含兩個線程池,即工作線程和I/O線程。工作線程可以包含自己的許多線程(如果應用程序創建自己的System.Thread
實例)。
該警告僅與System.Threads
有關,還是與工作線程和I/O線程相關Ie.因爲StreamWriter
類的實例變量不是線程安全的,那麼這是否意味着如果多個工作線程訪問它,將會出現問題,例如,如果兩個不同Web客戶機上的兩個用戶同時嘗試寫入日誌文件,那麼是否可以鎖定另一個?
謝謝+1。如果說如果使用靜態變量或函數,工作線程和IO線程只能受線程問題影響,這是否公平? – w0051977
不,您可以輕鬆地跨線程傳遞對象引用而不使用靜態。作爲一個例子,啓動線程可能會創建一個對象實例,然後將其傳遞(可能通過閉包中的變量捕獲)到在線程中運行的代碼中。任何你可能從多個線程訪問一個對象實例的地方,都需要注意線程的安全性,並在必要時添加鎖。 –
謝謝。我沒有看到如何在工作線程中共享實例變量。你能提供一個例子嗎? – w0051977