0

バッファを実装しました。バッファには、読み取りと書き込みの 2 つのプロパティがあります。read 関数呼び出しは、read_slot セマフォが使用可能になるまで待機します。書き込み関数呼び出しは write_slot で待機します。write_slot セマフォは初期カウント 100 および最大カウント 100 にインストールされますが、読み取りスロットは初期カウント 0 および最大カウント 100 に初期化されます。

そこで、バッファに書き込むイベントを発生させます --> 書き込みスロットを減らします --> 読み取りスロットを増やします。イベントは非常に高速に発生することがあります。読み取り操作では、read_slot が減少し、write_slot が増加します。したがって、このアーキテクチャはデッドロックに直面することはありません。つまり、read_slot が 0 で write_slot が 0 の場合にのみデッドロックが発生するため、共通のミューテックス ロック内でスロットが増減するため、これは不可能です。

それでも私はデッドロックの状況に直面しています。イベントトリガーシステムの機能について何か考えがある人はいますか?

4

1 に答える 1

0
  The event is fired very fast sometimes.

Producer Consumer パターンを使用してみませんか。明らかに、書き込みなしで読み取ることはできません (読み取り操作は、書き込み操作の後に行う必要があります)。BlockingCollectionsによって.Netでこれを簡単に実現できます。

于 2013-01-21T09:33:12.073 に答える