1

pthreads を使用して、C でマルチスレッド アプリケーションを作成したいと考えています。バックグラウンドで多くのワーカースレッドを実行したいのですが、時々、端末に何かを出力する必要があるため、必要になると思います

  • 「出力デバイスを取得する」(この場合は stdout)
  • それに書き込みます
  • 出力デバイスを解放する
  • すすぎ、繰り返します。

また、ユーザーが出力に「返信」できるようにしたいと考えています。簡単にするために、ユーザーがスレッドの出力に応答するまで、新しい行はユーザーが応答した後にのみ書き込まれるように、端末には何も書き込まれないと仮定します。端末でユーザー入力を待っていると、ncurses がこれに適しているようです。

しかし、ncurses はスレッドセーフではないことを読んだので、どうすればよいかわかりません。ターミナル関連のすべてをミューテックスでラップできると思いますが、その前に、これについてよりスマートでおそらくより便利な方法、おそらく条件変数を使用したソリューションがあるかどうかを知りたいですか? 私はここでやや迷子になっているので、どんな助けも大歓迎です。

4

2 に答える 2

1

端末と対話することを仕事とするスレッドを用意しないのはなぜですか?

他のスレッドがメッセージを送信したり端末からの応答を取得したりする場合、その要求を反映する構造を作成し、ミューテックスを取得し、その構造を連結リスト if 構造に追加できます。ターミナル スレッドはリンクされたリストをたどり、必要に応じてデータを出力し、必要に応じて応答を取得します。

条件変数を使用して、出力する必要のあるデータがあることを端末スレッドに通知できます。リンクされたリストの構造には、応答がある場合に端末スレッドが通知できる応答条件変数を含めることができます。

応答がない出力の場合、ターミナル スレッドは、その内容を出力した後に構造体を削除できます。応答を受け取る出力の場合、ターミナル スレッドは、出力に関心のあるスレッドにシグナルを送信し、そのスレッドが出力をコピーしたら、そのスレッドに構造を削除させることができます。

于 2013-01-20T01:33:30.340 に答える
0

端末で fprintf を使用できます。fprintf は、出力デバイスに書き込む前に stdout でミューテックス ロックを使用するなど、同時実行の問題を処理します。

于 2013-01-21T00:19:52.130 に答える