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