| #include <thread> | |
| #include "baz.h" | |
| std::condition_variable cv; | |
| std::mutex mutex; | |
| int bar(int i) { | |
| int j = i * i; | |
| return j; | |
| } | |
| int foo(int i) { return bar(i); } | |
| void compute_pow(int &n) { | |
| std::unique_lock<std::mutex> lock(mutex); | |
| n = foo(n); | |
| lock.unlock(); | |
| cv.notify_one(); // waiting thread is notified with n == 42 * 42, cv.wait | |
| // returns | |
| } | |
| void call_and_wait(int &n) { baz(n, mutex, cv); } | |
| int main() { | |
| int n = 42; | |
| std::thread thread_1(call_and_wait, std::ref(n)); | |
| std::thread thread_2(compute_pow, std::ref(n)); | |
| thread_1.join(); | |
| thread_2.join(); | |
| return 0; | |
| } |