我的类结构如下
public class Logger
{
StremWriter sw;
public Logger()
{
sw = new streamwriter(tempPath);
}
public StreamWriter StreamLog
{
get { return sw; }
}
}
我想知道如果我尝试从两个不同的线程访问 StreamWriter 对象,如何正确锁定。如下所示的锁定是否可以接受?或者我应该直接锁定 StreamWriter
//Log is an instance of Logger that could be accessed from multiple threads
lock (Log) {
Log.StreamLog.WriteLine("temp");
}
编辑:这些日志对象将进入一个ConcurrentQueue,不同的线程可以从那里检索它们
请您参考如下方法:
Is the locking as shown below acceptable? Or should I lock the StreamWriter directl
两者都不是特别安全。在您的类(class)本身中处理此问题会更加安全/可靠。不要将 StreamWriter 暴露给外界,而是创建您自己的 WriteLine 方法,并在内部处理锁定。这使得无法意外避免锁定。
例如,像这样的东西:
public class Logger
{
// Make an object to use for locking
private readonly object syncObj = new object();
StremWriter sw;
public Logger()
{
sw = new streamwriter(tempPath);
}
public void WriteLine(string textToOutput)
{
lock(syncObj)
sw.WriteLine(textToOutput);
}
}
