Hi all,
I Just have just getting started to use intels Threading Building Blocks, but it just took some minutes before I got some problem. If I am running the code below will m_type.size() always return 0 even if i am pushing new data in a second thread:
But if I am making m_type to a reference (&) will it work without problems.Code:#include <string> #include <iostream> #include <boost/thread.hpp> #include "tbb/concurrent_vector.h" class Test { public: Test(tbb::concurrent_vector<std::string> & t) //: m_type(t) { } void worker() { std::cout << "Producing now.."; while(true) { if(m_type.size() < 1000) { m_type.push_back(std::string("Mohaha")); std::cout << "worker: size = " << m_type.size() << std::endl; } } } void consumer() { std::cout << "Consuming now.."; while(true) { std::cout << "Consumer: size = " << m_type.size() << std::endl; if(m_type.size()) { std::string message = m_type.back(); std::cout << "Message: " << message << std::endl; if(m_type.size() > 100) { m_type.clear(); } } } } private: tbb::concurrent_vector<std::string> m_type; }; int main(int argc, char** argv) { tbb::concurrent_vector<std::string> vec; Test test(vec); boost::thread thread(boost::bind(&Test::worker, test)); boost::thread thread2(boost::bind(&Test::consumer, test)); thread2.join(); thread.join(); }
I know that local variables can be read into a processor cache and that is what I think happens, but how do I prevent it? And if it isn't the problem, what I am doing wrong then?
I second question:
Do any of you have any good multi threading links to share?
Thanks in advance![]()



LinkBack URL
About LinkBacks




CornedBee