#include "pseudo_barrier.h" #include #include #include #include #include #include pseudo_barrier_t barrier; constexpr size_t nthreads = 5; volatile bool wait_for_debugger_flag = true; void break_here() {} void tfunc() { pseudo_barrier_wait(barrier); break_here(); } int main(int argc, char const *argv[]) { lldb_enable_attach(); if (argc < 3) return 1; // Create a file to signal that this process has started up. std::ofstream(argv[1]).close(); // And wait for it to attach. for (int i = 0; i < 100 && wait_for_debugger_flag; ++i) std::this_thread::sleep_for(std::chrono::seconds(1)); // Fire up the threads and have them call break_here() simultaneously. pseudo_barrier_init(barrier, nthreads); std::vector threads; for (size_t i = 0; i < nthreads; ++i) threads.emplace_back(tfunc); for (std::thread &t : threads) t.join(); // Create the file to let the debugger know we're running. std::ofstream(argv[2]).close(); return 0; }