如闲置的好奇心比什么都重要的锻炼,可以考虑下面这个简单的日志类:.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