5

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

private object lockMethod = new object();

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

public void FromThread1() {
    Method();
}

public void FromThread2() {
    Method();
}

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

还有其他技术吗?

4

1 回答 1

9

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

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

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

于 2012-06-12T00:39:07.857 回答