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(); } }
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(); } }