2

私は、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::queuelockfree::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:- ここにどのタイトルを入れたらよいか本当にわかりません...できれば編集してください。

4

1 に答える 1