我是否正确,防止某个方法同时执行两次的唯一方法是使用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 包含许多其他类型的用于以各种形式进行同步的类型,包括ReaderWriterLockSlim
,Semaphore
,Mutex
,Monitor class
(这是lock
内部使用的方式)等。所有方法都提供了多种同步数据的方式,尽管每种方式都是适应不同的情况。在这种情况下,lock
是适合使用的方法。
关于c# - 防止方法同时从不同线程执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10989206/