セマフォを待機しているすべてのスレッドのブロックを解除するにはどうすればよいですか?

ブラックジャック21

私は、有限配列(または有限数のバッファー)を使用した標準的な生産者/消費者問題を扱っています。セマフォを使用して実装しようとしましたが、問題が発生しました。プロデューサーに50回だけ「プロデュース」してもらいたい。その後、プロデューサースレッドをメインスレッドに参加させます。この部分は簡単ですが、私ができないのは、コンシューマースレッドに参加することです。それらは、データがないことを示すセマフォ信号に固執しています。この問題を解決するにはどうすればよいですか?
考えられるオプションの1つは、プロデューサーがメインに参加したときにTrueになるフラグ変数を設定し、その後、メインスレッドがワーカースレッドの数と同じ回数のポスト(セマフォ)を実行することです。ワーカースレッドは、ウェイクアップ後に毎回フラグ変数をチェックし、Trueの場合、関数を終了します。
セマフォ後の呼び出しが多いため、私の方法はかなり非効率的だと思います。すべてのスレッドのブロックを一度に解除できれば素晴らしいです!
編集:私が言ったことを実装しようとしましたが、デッドロックのために機能しません

ソロモンスロー

1つのオプションは「ポイズンピル」法です。コンシューマースレッドがいくつ存在するかを知っていることを前提としています。N人の消費者がいると仮定すると、プロデューサーがそれを行った後、N個の「ポイズンピル」をキューに入れます。「ポイズンピル」とは、プロデューサーが通常生成するものと型互換性があるが、通常のオブジェクト/値とは区別できるオブジェクト/値です。

消費者が毒薬を食べたことを認識すると、それは死にます。問題が解決しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

セレンを使用してヘッドレスクロームでnavigator.webdriverの設定を解除するにはどうすればよいですか?

分類Dev

別のスレッドがC ++でセマフォを待機している間、1つのpthreadを続行するにはどうすればよいですか?

分類Dev

Javaでブロッキング読み取り操作で待機しているスレッドを停止するにはどうすればよいですか?

分類Dev

他のモニターで待機しているすべてのスレッドに通知するにはどうすればよいですか?

分類Dev

ディレクトリ内のすべてのフォルダでサブプロセスを実行するにはどうすればよいですか?

分類Dev

Jenkinsfileの「並列」ブロック内のすべてのエグゼキュータを待機するにはどうすればよいですか?

分類Dev

Linuxマシン上の他のすべてのプロセスをXXXミリ秒ブロックするにはどうすればよいですか?

分類Dev

ネットワーク操作を待機しているスレッドをすぐに強制終了するにはどうすればよいですか?

分類Dev

bashで実行されているバックグラウンドプロセスの数を確認し、各バックグラウンドプロセスを「待機」するにはどうすればよいですか?

分類Dev

Indyスレッドプール内のすべてのスレッドが終了するのを待つにはどうすればよいですか

分類Dev

スナップショットのプロセスウォークを実行した後、すべてのプロセスの完全なコマンドラインを取得するにはどうすればよいですか?

分類Dev

レトロフィットを使用してリクエストにヘッダーを追加するときにメインスレッドで待機しないようにするにはどうすればよいですか?

分類Dev

UITableViewの前のセルをクリックして次のセルのロックを解除するにはどうすればよいですか?

分類Dev

自分のマシンでIPアドレスのブロックを解除するにはどうすればよいですか?

分類Dev

スプレッド演算子を使用して既存の配列で新しい値をシフト解除するにはどうすればよいですか?

分類Dev

特定のドアを制御し、すべてのドアに対してグローバルな1つのスクリプトではなく、ドアをロック/ロック解除するにはどうすればよいですか?

分類Dev

Pythonでタイマーを使用して条件のブロックを解除するにはどうすればよいですか?

分類Dev

セマフォロックの取得/試行の取得が失敗した場合、Javaスレッドにブロックではなく別のタスクを実行させるにはどうすればよいですか?

分類Dev

すべてのbashプロセスをバックグラウンドとして実行するにはどうすればよいですか?

分類Dev

範囲内のすべてのIPアドレスをブロックするにはどうすればよいですか?

分類Dev

awkまたはsedを使用してブロックスタイルのレコードをテーブルにフォーマットするにはどうすればよいですか?

分類Dev

Delphi:すべてのクラスフィールドをゼロ値にリセットするにはどうすればよいですか?

分類Dev

Linuxで1つのプロセスのすべてのスレッド(および子)を解放するにはどうすればよいですか?

分類Dev

Linuxで1つのプロセスのすべてのスレッド(および子)を解放するにはどうすればよいですか?

分類Dev

非同期関数を同時に呼び出してすべてのコールバックを待機するにはどうすればよいですか?

分類Dev

フレックスボックスを使用してすべての要素をコンテナ内に保持するにはどうすればよいですか?

分類Dev

すべてのプロセスがアクセスできるマップを作成するにはどうすればよいですか?

分類Dev

Pythonのサブプロセスモジュールを使用して、それ自体がコマンドのグループであるコマンド引数をフォーマットするにはどうすればよいですか?

分類Dev

春のamqprabbitmqのプロデューサーをすべてのメッセージを送信した後に待機させ、すべてを受信したらリリースするにはどうすればよいですか?

Related 関連記事

  1. 1

    セレンを使用してヘッドレスクロームでnavigator.webdriverの設定を解除するにはどうすればよいですか?

  2. 2

    別のスレッドがC ++でセマフォを待機している間、1つのpthreadを続行するにはどうすればよいですか?

  3. 3

    Javaでブロッキング読み取り操作で待機しているスレッドを停止するにはどうすればよいですか?

  4. 4

    他のモニターで待機しているすべてのスレッドに通知するにはどうすればよいですか?

  5. 5

    ディレクトリ内のすべてのフォルダでサブプロセスを実行するにはどうすればよいですか?

  6. 6

    Jenkinsfileの「並列」ブロック内のすべてのエグゼキュータを待機するにはどうすればよいですか?

  7. 7

    Linuxマシン上の他のすべてのプロセスをXXXミリ秒ブロックするにはどうすればよいですか?

  8. 8

    ネットワーク操作を待機しているスレッドをすぐに強制終了するにはどうすればよいですか?

  9. 9

    bashで実行されているバックグラウンドプロセスの数を確認し、各バックグラウンドプロセスを「待機」するにはどうすればよいですか?

  10. 10

    Indyスレッドプール内のすべてのスレッドが終了するのを待つにはどうすればよいですか

  11. 11

    スナップショットのプロセスウォークを実行した後、すべてのプロセスの完全なコマンドラインを取得するにはどうすればよいですか?

  12. 12

    レトロフィットを使用してリクエストにヘッダーを追加するときにメインスレッドで待機しないようにするにはどうすればよいですか?

  13. 13

    UITableViewの前のセルをクリックして次のセルのロックを解除するにはどうすればよいですか?

  14. 14

    自分のマシンでIPアドレスのブロックを解除するにはどうすればよいですか?

  15. 15

    スプレッド演算子を使用して既存の配列で新しい値をシフト解除するにはどうすればよいですか?

  16. 16

    特定のドアを制御し、すべてのドアに対してグローバルな1つのスクリプトではなく、ドアをロック/ロック解除するにはどうすればよいですか?

  17. 17

    Pythonでタイマーを使用して条件のブロックを解除するにはどうすればよいですか?

  18. 18

    セマフォロックの取得/試行の取得が失敗した場合、Javaスレッドにブロックではなく別のタスクを実行させるにはどうすればよいですか?

  19. 19

    すべてのbashプロセスをバックグラウンドとして実行するにはどうすればよいですか?

  20. 20

    範囲内のすべてのIPアドレスをブロックするにはどうすればよいですか?

  21. 21

    awkまたはsedを使用してブロックスタイルのレコードをテーブルにフォーマットするにはどうすればよいですか?

  22. 22

    Delphi:すべてのクラスフィールドをゼロ値にリセットするにはどうすればよいですか?

  23. 23

    Linuxで1つのプロセスのすべてのスレッド(および子)を解放するにはどうすればよいですか?

  24. 24

    Linuxで1つのプロセスのすべてのスレッド(および子)を解放するにはどうすればよいですか?

  25. 25

    非同期関数を同時に呼び出してすべてのコールバックを待機するにはどうすればよいですか?

  26. 26

    フレックスボックスを使用してすべての要素をコンテナ内に保持するにはどうすればよいですか?

  27. 27

    すべてのプロセスがアクセスできるマップを作成するにはどうすればよいですか?

  28. 28

    Pythonのサブプロセスモジュールを使用して、それ自体がコマンドのグループであるコマンド引数をフォーマットするにはどうすればよいですか?

  29. 29

    春のamqprabbitmqのプロデューサーをすべてのメッセージを送信した後に待機させ、すべてを受信したらリリースするにはどうすればよいですか?

ホットタグ

アーカイブ