5

メソッドが同時に 2 回実行されるのを防ぐ唯一の方法は、lockステートメントを使用することです。

private object lockMethod = new object();

public void Method() {
    lock (lockMethod) {
        // work
    }
}

public void FromThread1() {
    Method();
}

public void FromThread2() {
    Method();
}

もちろんMethodImpl(MethodImplOptions.Synchronized)ほぼ同じものも使えます。

他のテクニックはありますか?

4

1 に答える 1

9

メソッドが同時に 2 回実行されるのを防ぐ唯一の方法は、lock ステートメントを使用することです。

いいえ、しかしこれは「標準的な」方法であり、おそらく最良の方法です。そうは言っても、通常はロックを使用して、メソッド全体ではなく、特定のデータへのアクセスを同期します。メソッド全体をロックすると、必要以上のブロッキングが発生する可能性があります。

他のメソッドについては、System.Threading名前空間には、 、、 、(内部で使用するもの) などReaderWriterLockSlim、さまざまな形式で同期に使用される他の多くの型が含まれています。別のシナリオ。この場合、使用する適切な方法です。SemaphoreMutexMonitor classlocklock

于 2012-06-12T00:39:07.857 に答える