我开发了一个写日志的类。它用" StreamWriter.WriteLine()"写入功能
logStream.WriteLine(msgWrite);
logStream.Flush();
一些不同的线程使用这个类来编写日志,在一个文本文件中(日志文件对所有线程都是通用的)是否需要lock()函数?
我应该更改我的代码吗?
lock(syncObj)
{
logStream.WriteLine(msgWrite);
logStream.Flush();
}
请帮帮我。
答案 0 :(得分:2)
您应该将您的编写器包装在TextWriter.Synchronized
中,正如该文档建议的那样,它确保所有生成的写操作都以线程安全的方式执行。
除此之外,是的,您可以使用lock
来执行此操作,但如果有这样的内置功能,我倾向于选择它。
快速而肮脏的实现可能如下所示:
public static class Logs
{
static Logs()
{
_Writer = TextWriter.Synchronized(new StreamWriter(path));
}
private static TextWriter _Writer;
static void LogLine(string line)
{
_Writer.WriteLine(line);
}
}