• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <chrono>
3 #include <thread>
4 
5 using std::chrono::microseconds;
6 
7 volatile int g_thread_2_continuing = 0;
8 
9 void *
thread_1_func(void * input)10 thread_1_func (void *input)
11 {
12     // Waiting to be released by the debugger.
13     while (!g_thread_2_continuing) // Another thread will change this value
14     {
15         std::this_thread::sleep_for(microseconds(1));
16     }
17 
18     // Return
19     return NULL;  // Set third breakpoint here
20 }
21 
22 void *
thread_2_func(void * input)23 thread_2_func (void *input)
24 {
25     // Waiting to be released by the debugger.
26     int child_thread_continue = 0;
27     while (!child_thread_continue) // The debugger will change this value
28     {
29         std::this_thread::sleep_for(microseconds(1));  // Set second breakpoint here
30     }
31 
32     // Release thread 1
33     g_thread_2_continuing = 1;
34 
35     // Return
36     return NULL;
37 }
38 
main(int argc,char const * argv[])39 int main(int argc, char const *argv[])
40 {
41     lldb_enable_attach();
42 
43     // Create a new thread
44     std::thread thread_1(thread_1_func, nullptr);
45 
46     // Waiting to be attached by the debugger.
47     int main_thread_continue = 0;
48     while (!main_thread_continue) // The debugger will change this value
49     {
50         std::this_thread::sleep_for(microseconds(1));  // Set first breakpoint here
51     }
52 
53     // Create another new thread
54     std::thread thread_2(thread_2_func, nullptr);
55 
56     // Wait for the threads to finish.
57     thread_1.join();
58     thread_2.join();
59 
60     printf("Exiting now\n");
61 }
62