I'm trying to put std::string
s into boost::lockfree::queue
s so that my threads can update each other with new data.
When I try to use boost::lockfree::queue<std::string> updated_data;
, g++
says :
In instantiation of 'class boost::lockfree::queue >':
error: static assertion failed: (boost::has_trivial_destructor::value)
error: static assertion failed: (boost::has_trivial_assign::value)
I've been shown generally what these errors mean, but I have no hope of ever fixing this myself, as I'm almost brand new to c++.
Is there an alternative way to pass text data between threads with lockfree
? If not, please show me how to put std::string
into a boost::lockfree::queue
.
The boost::lockfree::queue
documentation clearly states the the contained itemm must have a trivial copy assignment and destructor, which std::string
doesn't have.
If you have a single producer and a single consumer you can use spsc_queue
(http://www.boost.org/doc/libs/1_54_0/doc/html/boost/lockfree/spsc_queue.html) which requires only default constructability and copyability.
If you have multiple producers or consumers you're going to be stuck with a normal locking queue (or a custom string that doesn't use dynamic allocation).