C# 锁定对象
我的班级结构如下C# 锁定对象,c#,.net,multithreading,C#,.net,Multithreading,我的班级结构如下 public class Logger { StremWriter sw; public Logger() { sw = new streamwriter(tempPath); } public StreamWriter StreamLog { get { return sw; } } } 如果我尝试从两个不同的线程访问StreamWriter对象,我想知道如何正确锁定。如下所示的锁
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
中,不同的线程可以从中检索它们
如下所示的锁定是否可接受?还是应该锁定StreamWriter目录
两者都不是特别安全。在类本身中处理这个问题会更加安全。不要将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);
}
}
如下所示的锁定是否可接受?还是应该锁定StreamWriter目录
两者都不是特别安全。在类本身中处理这个问题会更加安全。不要将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);
}
}
我怀疑你是否有一个
StremWriter
。始终发布准确的代码,先编译,然后复制/粘贴。@HenkHolterman为了简洁起见,我是直接在这里输入的。但我要说的是,它将在将来编译。我怀疑你是否有一个StremWriter
。始终发布准确的代码,先编译,然后复制/粘贴。@HenkHolterman为了简洁起见,我是直接在这里输入的。但考虑到这一点,它将在将来编译。