防止方法同时从不同的线程执行
本文关键字:线程 执行 方法 | 更新日期: 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 命名空间包含许多用于各种形式的同步的其他类型的类型,包括 ReaderWriterLockSlim
、Semaphore
、Mutex
、Monitor class
(这是lock
内部使用的)等。 它们都提供了各种方法来同步数据,尽管每种方法都针对不同的方案。 在这种情况下,lock
是合适的使用方法。