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

jav*_*red 5 c#

我是否纠正了阻止方法同时执行两次的唯一方法是使用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)几乎相同的东西.

还有其他技术吗?

Ree*_*sey 9

我是否正确,防止方法同时执行两次的唯一方法是使用lock语句?

不,但这是"标准"方式,可能是最好的方式.话虽这么说,通常你会使用锁来同步对特定数据的访问,而不是整个方法.锁定整个方法可能会导致阻塞超过必要的阻塞.

至于其他的方法中,所述的System.Threading命名空间中包含用于各种形式的同步许多其它类型的,包括ReaderWriterLockSlim,Semaphore,Mutex,的Monitor class(这是lock在内部使用),等.所有提供不同的方法来同步数据,尽管每个是面向一个不同的场景.在这种情况下,lock是适当的使用方法.