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