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

本文关键字:线程 执行 方法 | 更新日期: 2023-09-27 18:36:47

我是否正确,防止一个方法同时执行两次的唯一方法是使用 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 命名空间包含许多用于各种形式的同步的其他类型的类型,包括 ReaderWriterLockSlimSemaphoreMutexMonitor class(这是lock内部使用的)等。 它们都提供了各种方法来同步数据,尽管每种方法都针对不同的方案。 在这种情况下,lock是合适的使用方法。