199451b44SJordan Rupprecht #include "pseudo_barrier.h"
299451b44SJordan Rupprecht #include <cstdio>
399451b44SJordan Rupprecht #include <thread>
499451b44SJordan Rupprecht 
599451b44SJordan Rupprecht volatile uint32_t g_val = 0;
6*7e2ef84fSMichał Górny pseudo_barrier_t g_barrier, g_barrier2;
799451b44SJordan Rupprecht 
thread_func()899451b44SJordan Rupprecht void thread_func() {
999451b44SJordan Rupprecht   pseudo_barrier_wait(g_barrier);
10*7e2ef84fSMichał Górny   pseudo_barrier_wait(g_barrier2);
1199451b44SJordan Rupprecht   printf("%s starting...\n", __FUNCTION__);
1299451b44SJordan Rupprecht   for (uint32_t i = 0; i < 10; ++i)
1399451b44SJordan Rupprecht     g_val = i;
1499451b44SJordan Rupprecht }
1599451b44SJordan Rupprecht 
main(int argc,char const * argv[])1699451b44SJordan Rupprecht int main(int argc, char const *argv[]) {
1799451b44SJordan Rupprecht   printf("Before running the thread\n");
1899451b44SJordan Rupprecht   pseudo_barrier_init(g_barrier, 2);
19*7e2ef84fSMichał Górny   pseudo_barrier_init(g_barrier2, 2);
2099451b44SJordan Rupprecht   std::thread thread(thread_func);
2199451b44SJordan Rupprecht 
22*7e2ef84fSMichał Górny   printf("After launching the thread\n");
2399451b44SJordan Rupprecht   pseudo_barrier_wait(g_barrier);
2499451b44SJordan Rupprecht 
25*7e2ef84fSMichał Górny   printf("After running the thread\n");
26*7e2ef84fSMichał Górny   pseudo_barrier_wait(g_barrier2);
27*7e2ef84fSMichał Górny 
2899451b44SJordan Rupprecht   thread.join();
2999451b44SJordan Rupprecht 
3099451b44SJordan Rupprecht   return 0;
3199451b44SJordan Rupprecht }
32