私は、2+ (gstreamer) boost::スレッドと、ダミーアプリケーションの同じ数のboost::スレッドがキューを同時に使用しているプログラムに取り組んでいます。現在、このキューは、 gstreamer スレッドのタスクとそれに対応するダミー アプリケーション スレッドとの間の同期に使用されます。
キューは EVENT キューです: EVENT は構造体です
typedef struct EVENT{
EVENT_TYPE Ev_Type; // EVENT_TYPE is enum of Events
EVENT_DATA Ev_Data; // EVENT_DATA is union of data to be stored for that event
}Event_;
グーグルで調べたところ、マルチスレッドアプリケーションに使用されていることを示唆する、キューの2つのオプションlockfree::queueとlockfree::spsc_queueに出会いました。lockfree::queues
混乱: なぜ lockFREE という名前なのですか? (ミューテックス)ロックできないことを示唆していますか?
この例も参照してください。「boost::lockfree::queue はロックフリーではありません」と表示されています。
心=吹き飛ばされた...
次に、例(上記のリンク)に従って、このキューを実装してみました
class Foo {
protected:
boost::lockfree::queue<EVENT> mqSttEventQueue;
public:
unsigned int SetEventIntoQueue(EVENT *psEvent);
};
そしてその定義は次のとおりです。
unsigned int Foo::SetEventIntoQueue(EVENT *psEvent) {
if(mqSttEventQueue.push(*psEvent)){
//notify that event is in queue;
}
}
これは正常にコンパイルされます。しかし、私はここで完全に暗闇の中を走っています。
質問:
この例でキューを次のように宣言する理由
boost::lockfree::queue<int> queue(128);
その128は何のためにあるのですか?キューのサイズが 128 (バイト/アイテム) であるということですか? queue<int>
キュー内のデータの型を宣言していますか?
私のプログラムでうまくいかなかったのはなぜですか
boost::lockfree::queue<EVENT> mqSttEventQueue(128);
このように宣言すると、次のようにコンパイルエラーが発生します
error: expected identifier before numeric constant boost::lockfree::queue<EVENT> mqSttEventQueue(128); ^~~
PS:- ここにどのタイトルを入れたらよいか本当にわかりません...できれば編集してください。