我是否纠正了阻止方法同时执行两次的唯一方法是使用lock
语句?
private object lockMethod = new object();
public void Method() {
lock (lockMethod) {
// work
}
}
public void FromThread1() {
Method();
}
public void FromThread2() {
Method();
}
当然我也可以使用MethodImpl(MethodImplOptions.Synchronized)
几乎相同的东西。
还有其他技术吗?
答案 0 :(得分:9)
我是否认为防止方法同时执行两次的唯一方法是使用lock语句?
不,但这是“标准”方式,可能是最好的方式。话虽这么说,通常你会使用锁来同步对特定数据的访问,而不是整个方法。锁定整个方法可能会导致更多的阻塞。
对于其他方法,System.Threading命名空间包含许多用于以各种形式进行同步的其他类型,包括ReaderWriterLockSlim
,Semaphore
,Mutex
,{{1} }(这是Monitor class
内部使用的)等等。所有这些都提供了各种同步数据的方法,尽管每种方法都适用于不同的场景。在这种情况下,lock
是适当的使用方法。