我的应用程序中有关键部分,其中包含很多代码:
这是在threadMethod中锁定访问的更好方法:

A)锁定所有块:

private object locker = new object();

private void threadMethod()
{
   while(true)
   {
      lock(locker)
      {
         // do work - a lot of code here
      }
      Thread.Sleep(2000);
   }
}

B)使用其他锁定的访问成员canWork:
 private static object locker = new object();
 private bool canWork;
 private bool CanWork
 {
     get { lock(locker) { return this.canWork; } }
     set { lock(locker) { this.canWork = value; } }
 }

  private void threadMethod()
  {
     while(true)
     {
        if(CanWork)
        {
           // do work - a lot of code here
        }
        Thread.Sleep(2000);
     }
  }

在代码中的某个地方
CanWork = false;

最佳答案

两者都不是特别好。

  • 第一个缺点是您长时间持有该锁。
  • 第二个缺点是检查后状态可以更改。

  • 而是尝试将不可变的参数传递给您的方法(例如,数据的副本)。您可能仍需要锁定以构造参数和收集结果,但希望这是一个短得多的时间。

    关于c# - C#使用锁练习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4266467/

    10-10 07:50