#include #include #include int bar(int i) { int *j = 0; *j = 1; return i; // break here } int foo(int i) { return bar(i); } void call_and_wait(int &n) { std::cout << "waiting for computation!" << std::endl; while (n != 42 * 42) ; std::cout << "finished computation!" << std::endl; } void compute_pow(int &n) { n = foo(n); } int main() { int n = 42; std::mutex mutex; std::unique_lock lock(mutex); std::thread thread_1(call_and_wait, std::ref(n)); std::thread thread_2(compute_pow, std::ref(n)); lock.unlock(); thread_1.join(); thread_2.join(); return 0; }