2

C++用の軽量マルチスレッドフレームワークを探しています。POSIXスレッドを見つけました。
POSIXスレッドの実際の経験を共有してください。始める前に、wikiからではなく、実際の人々からの長所と短所を知りたいと思います。
それを実際に何かと比較した場合(多分、より良い)、どちらかを知ることは興味深いでしょう。

UPD:クロスプラットフォーム機能は私にとって非常に重要なので、この方向性について説明していただければ幸いです。

UPD2:私はすでにQNX / Win32用の1つのフレームワークを使用した経験がありますが、軽量ではなく、-ああ、言及するのを忘れました-商用であり、無料ではありませんが、無料のものが必要です。

4

8 に答える 8

12

特に1.35を書き直した後は、 Boost.Threadsが本当に素晴らしいことがわかりました。Windows上のPOSIXスレッドはそれほど些細なことではなく、C APIなので、私は間違いなくBoostを好みます。それはあなたが必要とするすべてのものを持っていて、ポータブルで、ほとんどセットアップを必要としません。

于 2009-04-27T17:26:27.777 に答える
3

別の C スレッド API は、GLib の GThreads です。一部の gthread と pthread_create などの pthread 呼び出しの間には 1 対 1 のマッピングがありますが、gthread には非常に便利な 2 つの大きな機能があります。

  • スレッドプールと
  • スレッド間でメッセージを送信するための非同期キュー。

スレッド プールは非常に強力で、プールの動的なサイズ変更などを可能にします。http://library.gnome.org/devel/glib/2.20/glib-Threads.htmlを参照してください。

于 2009-05-01T15:59:08.887 に答える
2

POSIX スレッド API は C++ ではなく C API です。

何に使いたいですか?個人的には、非常にぎこちなく、過度に冗長な API だと思います。ただし、Unix/Linux のようなオペレーティング システムでクロスプラットフォーム開発を行いたい場合は、これが最善の策です。Windows ではネイティブにサポートされていません。

個人的には、スレッドやその他の OS 依存 API をコードで直接使用することはありません。その上に別の抽象化レイヤーを構築します。たとえば、「OS レイヤー」と呼ばれるものを構築しました。スレッド、セマフォ、タイマー、ミューテックスなどを操作するための C++ フレームワーク。私たちのコードはこれを排他的に使用します。内部には、POSIX、Win32、INTEGRITY、および vxWorks の実装があります。これにより、コードは多種多様なプラットフォームで動作します。

独自のレイヤーを構築したくない場合は、Boost、Qt などの他の多くのものを再利用することを検討できます。

于 2009-04-27T17:34:33.777 に答える
2

Boostのスレッド APIが気に入らない場合は、 POCOを参照してください。

于 2009-04-27T17:53:36.273 に答える
2

少し前に、自分が書いたプログラムに POSIX を使用しました。Linux と Solaris で問題なく動作し、実装もそれほど複雑ではありません。一方、私の兄弟は Windows プログラマーであり、Posix を優先しています。ターゲットにもよると思います。ブーストが少し肥大化していることに気づき、それについて悪いことを聞いていました。私の兄は、スライスしたパン以来最高のものだと思っています. フォード対シボレーだと思います。誰もが意見を持っているでしょう。

于 2009-04-27T17:38:16.203 に答える
1

C++ で作業している場合は、Boost スレッド ライブラリがおそらく最善の策です。Unix と win32 の両方で非常に良い経験をしました。ACE を避ける - 悪い設計、間違ったアプローチ。実際には使用していませんが、Intel TBBもご覧ください。

于 2009-05-15T00:42:31.893 に答える
1

あなたがQNXに言及しているように、ACEを見てください。これは、多くのプラットフォーム(QNX を含む)で利用できる広大なフレームワークです。他の人はすでにBoostについて言及しています。

低レベルで移植性がなく、エラーが発生しやすい C API の代わりに、これらのライブラリのいずれかを使用することをお勧めします。

于 2009-04-28T23:41:53.480 に答える
0

私はそれがwin32スレッドAPIにかなり似ていることを発見しました。注意する必要がある唯一の(実際の)違いは、同じスレッドで使用されたときにwin32ミューテックスがブロックされないのに対し、posixはブロックしないことです。それ以外は、かなり単純な API です。

于 2009-04-27T18:03:12.710 に答える