提高线程池的性能(C ++,pthreads)

时间:2014-01-06 11:33:04

标签: c++ pthreads

我的应用程序有一个主线程,可以将任务分配给多个工作线程。沟通模式如下:

线程函数(work是一个函数指针):

while(true) {
    pthread_mutex_lock(mutex);
    while(!work)
        pthread_cond_wait(cond, mutex); // wait for work...
    pthread_mutex_unlock(mutex);

    work();

    pthread_barrier_wait(barrier); /*all threads must finish their work*/
    if(thread_id == 0) {
        work = NULL;
        pthread_cond_signal(cond); /*tell the main thread that the work is done*/
    }
    pthread_barrier_wait(barrier); /* make sure that none of the other worker
                                   threads is already waiting on condition again...*/
}

在主线程(将任务分配给工作线程的函数)中:

pthread_mutex_lock(mutex);
work = func;
pthread_cond_broadcast(cond); // tell the worker threads to start...
while(work)
    pthread_cond_wait(cond, mutex); // ...and wait for them to finish
pthread_mutex_unlock(mutex);

我这里没有使用队列,因为一次只能有一个任务,主线程必须等待任务完成。该模式工作正常,但性能不佳。问题是,执行单个任务的任务很快就会被分配。因此,线程将经常挂起并等待该条件。我想减少pthread_mutex_(un)lock,phread_cond_wait和pthread_barrier的调用次数,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

一次只能执行一项任务。

您不需要安排。你不需要线程。你可以摆脱锁定。