xref: /llvm-project/compiler-rt/test/profile/Inputs/instrprof-gcov-multithread_fork.cpp (revision 0da37bedc2667da371eda30595a06210595881d0)
1bec223a9SCalixte Denizet #include <sys/types.h>
2bec223a9SCalixte Denizet #include <thread>
3bec223a9SCalixte Denizet #include <unistd.h>
4bec223a9SCalixte Denizet 
5bec223a9SCalixte Denizet template <typename T>
launcher(T func)6bec223a9SCalixte Denizet void launcher(T func) {
7*0da37bedSCalixte Denizet   auto t1 = std::thread(func);
8*0da37bedSCalixte Denizet   auto t2 = std::thread(func);
9bec223a9SCalixte Denizet 
10*0da37bedSCalixte Denizet   t1.join();
11*0da37bedSCalixte Denizet   t2.join();
12bec223a9SCalixte Denizet }
13bec223a9SCalixte Denizet 
g()14*0da37bedSCalixte Denizet void g() {}
15bec223a9SCalixte Denizet 
f()16bec223a9SCalixte Denizet void f() {
17bec223a9SCalixte Denizet   fork();
18bec223a9SCalixte Denizet   launcher<>(g);
19bec223a9SCalixte Denizet }
20bec223a9SCalixte Denizet 
main()21bec223a9SCalixte Denizet int main() {
22bec223a9SCalixte Denizet   launcher<>(f);
23bec223a9SCalixte Denizet 
24bec223a9SCalixte Denizet   return 0;
25bec223a9SCalixte Denizet }
26