1*99451b44SJordan Rupprecht #include <stdio.h>
2*99451b44SJordan Rupprecht #include <fcntl.h>
3*99451b44SJordan Rupprecht 
4*99451b44SJordan Rupprecht #include <chrono>
5*99451b44SJordan Rupprecht #include <thread>
6*99451b44SJordan Rupprecht 
7*99451b44SJordan Rupprecht volatile bool debugger_flag = true; // The debugger will flip this to false
8*99451b44SJordan Rupprecht 
start(void * data)9*99451b44SJordan Rupprecht void *start(void *data)
10*99451b44SJordan Rupprecht {
11*99451b44SJordan Rupprecht     int i;
12*99451b44SJordan Rupprecht     size_t idx = (size_t)data;
13*99451b44SJordan Rupprecht     for (i=0; i<30; i++)
14*99451b44SJordan Rupprecht     {
15*99451b44SJordan Rupprecht         if ( idx == 0 && debugger_flag)
16*99451b44SJordan Rupprecht             std::this_thread::sleep_for(std::chrono::microseconds(1)); // Set breakpoint here
17*99451b44SJordan Rupprecht         std::this_thread::sleep_for(std::chrono::seconds(1));
18*99451b44SJordan Rupprecht     }
19*99451b44SJordan Rupprecht     return 0;
20*99451b44SJordan Rupprecht }
21*99451b44SJordan Rupprecht 
main(int argc,char const * argv[])22*99451b44SJordan Rupprecht int main(int argc, char const *argv[])
23*99451b44SJordan Rupprecht {
24*99451b44SJordan Rupprecht     lldb_enable_attach();
25*99451b44SJordan Rupprecht 
26*99451b44SJordan Rupprecht     static const size_t nthreads = 16;
27*99451b44SJordan Rupprecht     std::thread threads[nthreads];
28*99451b44SJordan Rupprecht     size_t i;
29*99451b44SJordan Rupprecht 
30*99451b44SJordan Rupprecht     for (i=0; i<nthreads; i++)
31*99451b44SJordan Rupprecht         threads[i] = std::move(std::thread(start, (void*)i));
32*99451b44SJordan Rupprecht 
33*99451b44SJordan Rupprecht     for (i=0; i<nthreads; i++)
34*99451b44SJordan Rupprecht         threads[i].join();
35*99451b44SJordan Rupprecht }
36