void Test1 () { int NTasks = min(MaxTasks, max(2, MaxThread)); Harness::SpinBarrier barr(NTasks); TestFunc1 tf(barr); FinishedTasks = 0; tbb::aligned_space<TestTask1,MaxTasks> tasks; #if USE_LITHE tbb::lithe::scheduler sched; lithe_sched_enter(&sched); #endif for(int i=0; i<NTasks; ++i) { TestTask1* t = tasks.begin()+i; new(t) TestTask1(i%2==0, tf); t->start(); } #if USE_LITHE sched.joinAll(); lithe_sched_exit(); #else Harness::Sleep(1000); // wait a second :) #endif ASSERT( FinishedTasks==NTasks, "Some threads appear to deadlock" ); for(int i=0; i<NTasks; ++i) { TestTask1* t = tasks.begin()+i; t->wait_to_finish(); t->~TestTask1(); } }
int main() { barrier barr(3); std::thread thr1(f, std::ref(barr)); std::thread thr2(f, std::ref(barr)); std::thread thr3(f, std::ref(barr)); thr1.join(); thr2.join(); thr3.join(); return 0; }
void Test2() { Harness::SpinBarrier barr(2); TestFunc2a func2a(barr); TestTask2a t2a(0, func2a); TestFunc2b func2b(barr, t2a); NativeParallelForTask<int,TestFunc2b> t2b(1, func2b); FinishedTasks = 0; t2a.start(); t2b.start(); Harness::Sleep(1000); // wait a second :) ASSERT( FinishedTasks==2, "Threads appear to deadlock" ); t2b.wait_to_finish(); // t2a is monitored by t2b }
void Test2() { Harness::SpinBarrier barr(2); TestFunc2a func2a(barr); TestTask2a t2a(0, func2a); TestFunc2b func2b(barr, t2a); #if USE_LITHE tbb::lithe::scheduler sched; lithe_sched_enter(&sched); #endif NativeParallelForTask<int,TestFunc2b> t2b(1, func2b); FinishedTasks = 0; t2a.start(); t2b.start(); #if USE_LITHE sched.joinAll(); lithe_sched_exit(); #else Harness::Sleep(1000); // wait a second :) #endif ASSERT( FinishedTasks==2, "Threads appear to deadlock" ); t2b.wait_to_finish(); // t2a is monitored by t2b }
void Test1 () { int NTasks = min(MaxTasks, max(2, MaxThread)); Harness::SpinBarrier barr(NTasks); TestFunc1 tf(barr); FinishedTasks = 0; tbb::aligned_space<TestTask1,MaxTasks> tasks; for(int i=0; i<NTasks; ++i) { TestTask1* t = tasks.begin()+i; new(t) TestTask1(i%2==0, tf); t->start(); } Harness::Sleep(1000); // wait a second :) ASSERT( FinishedTasks==NTasks, "Some threads appear to deadlock" ); for(int i=0; i<NTasks; ++i) { TestTask1* t = tasks.begin()+i; t->wait_to_finish(); t->~TestTask1(); } }