
i modified an example <http://en.highscore.de/cpp/boost/>, but i dont know why it gets locked!
#define BOOST_THREAD_USE_LIB #include <iostream> #include <boost/thread.hpp> #include <vector> using namespace std;
vector<int> someSharedResource; boost::mutex mutex; boost::condition_variable_any condition; void Writer() {
for (int i = 0; i < 10 ; i++) { boost::unique_lock<boost::mutex> locker(mutex); someSharedResource.push_back(i); // cout<<boost::this_thread::get_id()<<"\t"<<endl; condition.notify_all(); condition.wait(mutex); }
} void Reader() { int counted_items=0; for( int i =0;i<10;i++) { boost::unique_lock<boost::mutex> locker(mutex); condition.wait(mutex);
cout<<someSharedResource.back()<<"\t"<<boost::this_thread::get_id()<<endl; counted_items++; condition.notify_all(); }
} int main() { boost::thread t1(Writer); boost::thread t2(Reader); t1.join(); t2.join(); }
is it not that , the mutex is not released until the writer function , gets passed the wait(mutex) method ? and after that waits for the mutex ? and inside reader function , when it is awakened by the notify_all() method by writer function , it waits until writer releases the mutex and then it owns it and there it executes . so why do i fell into a locked down of some kind . if i run this example couple of times , some times it works fine and some times it just hangs at the beginning ( getting locked ? ) whats wrong with it . ?