有必要在单线程程序上使用锁吗?

时间:2014-05-05 06:34:31

标签: c# multithreading locking

我有一个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);
    }
}

更新:很抱歉让这个问题偏离正轨,但我发现它确实使用了多个线程。我的下一个问题是,通过锁定this.BaseStream,可以访问WriteTo来将其复制到另一个流中,如下所示:

lock (this.BaseStream)
{
    using (FileStream fileStream = new FileStream(strNewFileName, FileMode.Create, FileAccess.Write))
    {
        (this.BaseStream as MemoryStream).WriteTo(fileStream);
    }
}

1 个答案:

答案 0 :(得分:1)

您不应该锁定您将要使用的对象,而是创建一个可以用于此的锁object

private readonly object myLock = new object();

void DoThreadedStuff(){
  lock(myLock){
    //Anything that requires a lock here.
  }
}

这只会锁定myLock对象,而不是流本身。