コード例 #1
0
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();
    }
}
コード例 #2
0
ファイル: main.cpp プロジェクト: bedrokonya/cpp
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;
}
コード例 #3
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
}
コード例 #4
0
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
}
コード例 #5
0
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();
    }
}