繁体   English   中英

在 lock 语句中使用匿名方法

[英]Using of anonymous methods in lock statement

我必须使用匿名方法组织线程安全地从集合中删除项目。 像这样的东西。

...
lock(this.set)
{
   ...
   this.set.Add(item);

   action(()=>{
      lock(this.set)
      {
         this.set.Remove(item);
      }
   });
}
...

匿名方法将在那时被执行,可能是从另一个线程执行的。 这种锁定操作员的方式是否正确? 这里有一些我必须考虑的即兴演奏吗?

提前致谢。

但是,这将起作用,您是否查看过 .NET 4 中的 ConcurrentCollections? 它们是内部线程安全的

这取决于对委托执行的action (在您的情况下形成为 lambda 表达式)。 如果它是同步执行的,那么第二个lock是没有意义的。 不过,这将是安全的,因为可以重新进入lock 如果它在另一个线程上异步执行它,那么如果action等待委托的任何调用完成,您可能会死锁两个线程。 那将是我能想到的唯一“即兴演奏”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM