c# - 我想知道有没有更好的方法来实现这个 "simple lock"

标签 c# locking nonblocking

有没有更好的方法来实现如下所示的简单锁?

我只想转到“DOSOMETHING”(如果它尚未运行)。我应该在这里使用真正的锁吗?如果我使用锁,是否会导致一切排队等待锁释放? (这不是我想要的!)

谢谢

  bool running = false;

  void DataDisplayView_Paint(object sender, PaintEventArgs e)
  {
    // if (!this.initialSetDone)  
     if (!running)
     {
        this.running = true;

        //DOSOMETHING

        this.running = false;
     }
 }

最佳答案

不,你不想在这里使用锁。这不是线程同步问题。这是一个方法重入问题。

你可以尝试这样的事情。

bool running = false; 

void DataDisplayView_Paint(object sender, PaintEventArgs e) 
{ 
  if (!this.running)
  {
    this.running = true; 
    try
    {
      //DOSOMETHING 
    }
    finally
    {
      this.running = false; 
    }
  }
}

关于c# - 我想知道有没有更好的方法来实现这个 "simple lock",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3557951/

相关文章:

c# - Entity Framework 中的并发异常

c# - NHibernate:传递给 save() 和级联的未初始化代理

java - 为什么要在释放操作中获取锁

Golang 并发写入变量 - 为什么这段代码有效?

java - 了解非阻塞 Web 服务调用与非阻塞 JDBC 之间的区别

.net - 是否有 MessageBox.Show 的非阻塞版本(或类似的版本)?

c# - 将 bool 条件传递给我可以在需要时调用的方法

c# - 如何将集线器内容从任何服务器带到*另一台服务器*项目集线器?

sqlite数据库连接/锁定问题

akka - 在 Akka 中等待多个结果