11

スレッドが新しいデータで互いに更新できるように、std::strings をsに入れようとしています。boost::lockfree::queue

を使用しようとするとboost::lockfree::queue<std::string> updated_data;、次のように表示されg++ます。

「class boost::lockfree::queue >」のインスタンス化:

エラー: 静的アサーションに失敗しました: (boost::has_trivial_destructor::value)

エラー: 静的アサーションに失敗しました: (boost::has_trivial_assign::value)

私はこれらのエラーが何を意味するのかを一般的に示されていますが、私はC ++にほとんど慣れていないため、これを自分で修正することはできません.

を使用してスレッド間でテキスト データを渡す別の方法はありlockfreeますか? std::stringそうでない場合は、 に入れる方法を教えてくださいboost::lockfree::queue

4

3 に答える 3

10

boost::lockfree::queueドキュメントには、含まれているアイテムには単純なコピー割り当てとデストラクタが必要であることが明確に記載されていますが、これにはありませstd::stringん。

単一のプロデューサーと単一のコンシューマーがある場合は、デフォルトの構築可能性とコピー可能性のみを必要とするspsc_queue( http://www.boost.org/doc/libs/1_54_0/doc/html/boost/lockfree/spsc_queue.html ) を使用できます。

複数のプロデューサーまたはコンシューマーがある場合、通常のロック キュー (または動的割り当てを使用しないカスタム文字列) に行き詰まるでしょう。

于 2013-07-03T15:57:32.090 に答える