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 Rupprechtvoid *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 Rupprechtint 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