如閒置的好奇心比什麼都重要的鍛鍊,可以考慮下面這個簡單的日誌類:.NET 2.0:File.AppendAllText(...) - 線程安全的實現
internal static class Logging
{
private static object threadlock;
static Logging()
{
threadlock = new object();
}
internal static void WriteLog(string message)
{
try
{
lock (threadlock)
{
File.AppendAllText(@"C:\logfile.log", message);
}
}
catch
{
...handle logging errors...
}
}
}
圍繞File.AppendAllText(...)
的lock
需要或者該方法是否由於其自身的實現而具有固有的線程安全性?
尋找這方面的信息會產生很多矛盾的信息,有些人說是,有些人說不。 MSDN什麼也沒說。
這是矛盾的。如果File.AppendAllText有一個獨佔的寫鎖,爲什麼你需要單獨的鎖? – iheanyi 2014-02-26 21:42:43
你誤會了,它是被鎖定寫入的文件。所以任何其他試圖同時寫入的線程都會收到異常。爲了防止這種情況發生,您必須使用程序中的鎖來序列化寫入。 – Pradeep 2014-07-03 20:05:44