防止方法同时从不同的线程执行

时间:2012-06-12 00:36:42

标签: c#

我是否纠正了阻止方法同时执行两次的唯一方法是使用lock语句?

private object lockMethod = new object();

public void Method() {
    lock (lockMethod) {
        // work
    }
}

public void FromThread1() {
    Method();
}

public void FromThread2() {
    Method();
}

当然我也可以使用MethodImpl(MethodImplOptions.Synchronized)几乎相同的东西。

还有其他技术吗?

1 个答案:

答案 0 :(得分:9)

  

我是否认为防止方法同时执行两次的唯一方法是使用lock语句?

不,但这是“标准”方式,可能是最好的方式。话虽这么说,通常你会使用锁来同步对特定数据的访问,而不是整个方法。锁定整个方法可能会导致更多的阻塞。

对于其他方法,System.Threading命名空间包含许多用于以各种形式进行同步的其他类型,包括ReaderWriterLockSlimSemaphoreMutex,{{1} }(这是Monitor class内部使用的)等等。所有这些都提供了各种同步数据的方法,尽管每种方法都适用于不同的场景。在这种情况下,lock是适当的使用方法。