-1

私は車輪の再発明をしたくありません、そして私が探しているものはおそらくFOSSの世界にすでに存在しています。

スレッド間の通信を行うためによく使用されるプリミティブを実装するpthreadベースのユーティリティライブラリを探しています。

私の主なニーズは、固定サイズのメッセージ用のある種のブロッキングキューと、データが同時に複数のキューに到着するのを待つ機能です(通常、ポーリングとファイルハンドルを使用して選択します)。

このようなものはありますか?

プログラミング言語はC++ですが、Cライブラリで問題ありません。OSはLinuxですが、posixなら何でもできます。

編集

私はpthreadの周りの薄いラッパー(boost :: threadなど)を探していません。私はすでにこれを稼働させています。より高いレベルのプリミティブを探しています。基本的に、java.util.concurranceyがJavaの人に提供するもの。

4

4 に答える 4

2

あなたの要件はすでにPOSIX Message Queuesに組み込まれています。

select() を使用する代わりに、逆に行うことができます。select() で待機するのではなく、mq_notify()を使用して、読み取るものがあるときに通知することができます。MQ を使用すると、シグナルを配信するか、新しいスレッドを生成してキューを読み取るかを選択できます。

本当に select() を使用するつもりなら、mqd_t 型は実際にはファイル記述子であるため、Linux はこれを簡単にします。mq_open() から返された mqd_t は、select() で他の FD と同様に使用できます。

select() での mqd_t の使用は移植性がないことに注意してください。理論的には、他のシステムでも同様のことができるはずですが、テストしたことはありません。POSIX MQ にはファイルシステムへのエントリへのパスがあるため、パスに対して直接 open() を実行し、返されたファイル記述子を select() で使用して、それを mq_open() で使用される mqd_t にマッピングして決定できるはずです。どのキューを読み取るか。繰り返しますが、私はそれを試したことはありません。

于 2010-10-17T20:41:15.580 に答える
1

常にboost::threadがあります。

于 2010-10-17T21:17:39.077 に答える
0

OpenMPを試すことができますが、pthreadAPIに基づいているかどうかはわかりません。

于 2010-10-17T18:53:32.903 に答える
0

どのプログラミング言語/環境向けですか?

いくつかのオプション:

于 2010-10-17T19:18:03.203 に答える