gpt4 book ai didi

c# - 锁定对象

转载 作者:太空宇宙 更新时间:2023-11-03 20:22:45 26 4
gpt4 key购买 nike

我的类结构如下

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);
}
}

关于c# - 锁定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com