xref: /llvm-project/lldb/test/API/functionalities/scripted_process/main.cpp (revision 8f549c5329275293ced1d5eb87a1cf8b3d52a794)
1d3e0f7e1SMed Ismail Bennani #include <thread>
2d3e0f7e1SMed Ismail Bennani 
3*8f549c53SMed Ismail Bennani #include "baz.h"
4*8f549c53SMed Ismail Bennani 
5*8f549c53SMed Ismail Bennani std::condition_variable cv;
6*8f549c53SMed Ismail Bennani std::mutex mutex;
7680ca7f2SMed Ismail Bennani 
bar(int i)8d3e0f7e1SMed Ismail Bennani int bar(int i) {
9d3e0f7e1SMed Ismail Bennani   int j = i * i;
10680ca7f2SMed Ismail Bennani   return j;
11d3e0f7e1SMed Ismail Bennani }
12d3e0f7e1SMed Ismail Bennani 
foo(int i)13d3e0f7e1SMed Ismail Bennani int foo(int i) { return bar(i); }
14d3e0f7e1SMed Ismail Bennani 
compute_pow(int & n)15*8f549c53SMed Ismail Bennani void compute_pow(int &n) {
16*8f549c53SMed Ismail Bennani   std::unique_lock<std::mutex> lock(mutex);
17*8f549c53SMed Ismail Bennani   n = foo(n);
18*8f549c53SMed Ismail Bennani   lock.unlock();
19*8f549c53SMed Ismail Bennani   cv.notify_one(); // waiting thread is notified with n == 42 * 42, cv.wait
20*8f549c53SMed Ismail Bennani                    // returns
21d3e0f7e1SMed Ismail Bennani }
22d3e0f7e1SMed Ismail Bennani 
call_and_wait(int & n)23*8f549c53SMed Ismail Bennani void call_and_wait(int &n) { baz(n, mutex, cv); }
24d3e0f7e1SMed Ismail Bennani 
main()25d3e0f7e1SMed Ismail Bennani int main() {
26d3e0f7e1SMed Ismail Bennani   int n = 42;
27d3e0f7e1SMed Ismail Bennani   std::thread thread_1(call_and_wait, std::ref(n));
28d3e0f7e1SMed Ismail Bennani   std::thread thread_2(compute_pow, std::ref(n));
29d3e0f7e1SMed Ismail Bennani 
30d3e0f7e1SMed Ismail Bennani   thread_1.join();
31d3e0f7e1SMed Ismail Bennani   thread_2.join();
32d3e0f7e1SMed Ismail Bennani 
33d3e0f7e1SMed Ismail Bennani   return 0;
34d3e0f7e1SMed Ismail Bennani }
35