必须在单线程程序中使用锁
本文关键字:程序 单线程 | 更新日期: 2023-09-27 18:01:45
我有一个c#程序,它使用一个简单的日志类(您猜对了)来创建日志文件。下面是类构造函数的代码。我想知道如果因为它只使用一个线程,我真的需要在流上使用lock
吗?
public Logger(MemoryStream stream)
: base(stream)
{
try
{
// Flush the buffers automatically
this.AutoFlush = true;
lock (this.BaseStream) // <-- Do I need this?
{
// Writes header to log file
this.WriteLine("Date & Time: " + DateTime.Now.ToString());
this.WriteLine("OS: " + OSVersion.GetOSVersion());
this.WriteLine();
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
UPDATE:抱歉把这个问题带离课程,但我刚刚发现它确实使用多个线程。我的下一个问题是,有了对this.BaseStream
的锁定,可以使用WriteTo
将其复制到另一个流中吗,如下所示:
lock (this.BaseStream)
{
using (FileStream fileStream = new FileStream(strNewFileName, FileMode.Create, FileAccess.Write))
{
(this.BaseStream as MemoryStream).WriteTo(fileStream);
}
}
你不应该锁定你即将使用的对象,而是创建一个可以使用的锁object
。
private readonly object myLock = new object();
void DoThreadedStuff(){
lock(myLock){
//Anything that requires a lock here.
}
}
这将只锁定myLock
对象,而不是流本身。