Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Using conditional variable and mutex
- void function_1() {
- int count = 10;
- while (count > 0) {
- std::unique_lock<mutex> locker(mu);
- q.push_front(count);
- locker.unlock();
- cond.notify_one(); // Notify one waiting thread, if there is one.
- std::this_thread::sleep_for(chrono::seconds(1));
- count--;
- }
- }
- void function_2() {
- int data = 0;
- while ( data != 1) {
- std::unique_lock<mutex> locker(mu);
- cond.wait(locker, [](){ return !q.empty();} ); // Unlock mu and wait to be notified
- // relock mu
- data = q.back();
- q.pop_back();
- locker.unlock();
- cout << "t2 got a value from t1: " << data << endl;
- }
- }
- int main() {
- std::thread t1(function_1);
- std::thread t2(function_2);
- t1.join();
- t2.join();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment