我是否正确,防止某个方法同时执行两次的唯一方法是使用lock语句?

private object lockMethod = new object();

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

public void FromThread1() {
    Method();
}

public void FromThread2() {
    Method();
}

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

还有其他技巧吗?

最佳答案



不,但这是“标准”方式,可能是最好的方式。话虽如此,通常您将使用锁来同步对特定数据的访问,而不是对整个方法的访问。锁定整个方法可能会导致不必要的阻塞。

至于其他方法,System.Threading namespace 包含许多其他类型的用于以各种形式进行同步的类型,包括ReaderWriterLockSlimSemaphoreMutexMonitor class(这是lock内部使用的方式)等。所有方法都提供了多种同步数据的方式,尽管每种方式都是适应不同的情况。在这种情况下,lock是适合使用的方法。

关于c# - 防止方法同时从不同线程执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10989206/

10-12 12:42
查看更多