4

glibには と呼ばれるデータ構造がありGAsyncQueue、セマフォ/ロックなどを使用せずにスレッド間通信を可能にし、生産者/消費者ソリューションを実装するタスクを簡単にします。2 つの異なるスレッドがデータをGAsyncQueue構造体にプッシュする場合、push関数はキューへの相互排他的アクセスを内部的に実装します。さらに驚くべきことに、スレッドがpop関数を呼び出し、そこにデータがない場合、呼び出し元のスレッドは、他のスレッドによってデータがキューにプッシュされるまでブロックされます。これらはすべてスレッドセーフな方法で、開発者に対して透過的に行われます。

ただし、このライブラリは C 用に作成されたものであり、高水準言語用のより良い代替手段があるかもしれません。とにかくglibを使おうと思っているのですが、C++コードでCライブラリを使うのは違和感があります...

質問は、glib に相当する C++ 推奨のものはありますか? より具体的には、と同じ機能を提供する、より推奨される C++ ライブラリはありますGAsyncQueueか?

4

1 に答える 1

3

C ++プログラムでCを使用することに何の問題もありません(結局のところ、C ++の実装はCランタイムに大きく依存しています。たとえば、少なくともUNIX®ライクなプラットフォームでは、C ++ 11スレッドのサポートはpthreadライブラリなしでは実現できません)。私は間違いなくツール/ライブラリだけを選択せず​​、それが書かれている言語に完全に基づいています。しかし、何か他のものを使用する必要がある場合、非同期メッセージパッシングを提供するライブラリはglibだけではありません(ちなみに、 IPCをサポートしているようには見えません)。とにかく、ここにすぐに頭に浮かぶC ++フレームワークのリストがあります(ランダムな順序で、私の考えと同じくらいランダムです):

それぞれに独自の長所と短所があり、どちらを使用するかは、実際には要件が何であるかによって異なります。アプリケーションアーキテクチャ全体と、非同期メッセージパッシングがアプリケーションのすべてのコンポーネントにどの程度適合するかに注意を払うことをお勧めします。たとえば、単純なメッセージパッシング以上のものを含む多かれ少なかれ複雑なアプリケーションでは、そのような非同期キューは、使用中のイベント通知メカニズムと統合されることがよくあります(たとえば、OSXはkqueue / GCDを中心に構築されています)。

それが役に立てば幸い。幸運を!

于 2013-02-27T18:32:15.083 に答える