必须在单线程程序中使用锁

本文关键字:程序 单线程 | 更新日期: 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对象,而不是流本身。