Hello. I have following small program (pseudocode): void Read() { do { // ... } while (...); } // Read() void Write() { do { // ... } while (...); } // Write() boost::thread thrd1(Read); boost::thread thrd2(Write); // I don't want the following thrd1.join(); thrd2.join(); No, I want to stop when either thread finishes something like a join_any(). Does that exist? greetings Chris } while (...); } // Write() boost::thread thrd1(Read); boost::thread thrd2(Write); // I don't want the following thrd1.join(); thrd2.join(); No, I want to stop when either thread finishes something like a conditional join. Does that exist? greetings Chris
At Mon, 22 Nov 2010 16:12:22 -0800 (PST), Chris wrote:
No, I want to stop when either thread finishes something like a join_any(). Does that exist?
greetings Chris
} while (...); } // Write()
boost::thread thrd1(Read); boost::thread thrd2(Write);
// I don't want the following thrd1.join(); thrd2.join();
No, I want to stop when either thread finishes something like a conditional join. Does that exist?
Sounds like a job for condition variables. -- Dave Abrahams BoostPro Computing http://www.boostpro.com
Hello. condition variables OK but then my actual problem is that the Read- function is already waiting for data to arrive using a condition variable something like: void Read() { bool end_loop = false; do { scoped_lock<interprocess_mutex> lock(recvChannel->_mutex); // wait for data to arrive recvChannel->_condition.wait(lock); end_loop = (std::strcmp(recvChannel->_data, "X") == 0); if ( ! end_loop) std::cout << recvChannel->_data << "\n>"; } while (!end_loop); } // Read() Normally in my scenario, another process notifies Read() by sending data. But Ok, within the same process I could wake it up notifying channel2 as well As a general question then, is it possible to wait for more than 1 condition in a OR like fashion or something ? thank you On Nov 23, 3:47 am, David Abrahams <d...@boostpro.com> wrote:
At Mon, 22 Nov 2010 16:12:22 -0800 (PST),
Chris wrote:
No, I want to stop when either thread finishes something like a join_any(). Does that exist?
greetings Chris
} while (...); } // Write()
boost::thread thrd1(Read); boost::thread thrd2(Write);
// I don't want the following thrd1.join(); thrd2.join();
No, I want to stop when either thread finishes something like a conditional join. Does that exist?
Sounds like a job for condition variables.
-- Dave Abrahams BoostPro Computinghttp://www.boostpro.com
_______________________________________________ Boost-users mailing list Boost-us...@lists.boost.orghttp://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Chris
-
David Abrahams