-3

「Lock()」を使用して重要なセクションをロックしたい一方で、ボタンをクリックするだけでスレッドを一時停止できるようにしたい (「一時停止」機能を使用すべきではないことはわかっています。しかし、私は本当に選択の余地がありません)。

他のスレッドがこのクリティカル セクションに入る可能性があります。デッドロックを防ぐにはどうすればよいですか?

「Suspend」関数が (「Abort()」関数のように) 例外をスローしていた場合、問題はありませんでした。「最終的に」ステートメントでモニターが解放されました...

例えば:

static List<Thread> threadList = new List<Thread>();
public static List<Thread> ThreadList
{
    get { lock (_locker) { return SaveLists.threadList; } }
    set { lock (_locker) { SaveLists.threadList = value; } }
}

オブジェクトをロックしたスレッドを一時停止すると、その後、別のスレッドがリストを設定/取得する必要があります => DEADLOCK.

4

1 に答える 1

1

解決策は単純すぎることがわかりました。今まで考えもしなかった自分にビックリ…

他のスレッドを一時停止したスレッドは、クリティカル セクションを最初にロックする必要があります。これにより、他のスレッドが内部に入らないことが効果的に保証されます。

「一時停止」機能を使うべきではないことはわかっていますが、使用するように求められており、やむを得ません。

残念ながら適切な回答が得られず、点数が下がってしまい、「その機能は絶対に使ってはいけない」というような回答になってしまったのは残念です。そして、私は一般的にその使用が禁止されていることを知っています.

私はとてもがっかりしています。彼はフォーラムにふさわしくないと思います。

于 2013-08-31T22:45:20.867 に答える