C语言 Pthread 唤醒多个线程的最佳方法



我想知道使用循环一次唤醒多个线程的最佳方法是什么 我想过使用pthread_cond但我不需要互斥锁,因为我不是在等待资源

有 n 个线程:

start of thread
loop
action
wait
end of loop

然后主线程会注意到它们都开始工作。 是使用每个线程互斥锁的 pthread cond 更好,还是每次任务完成时重新创建线程更好?

您确实可以为此使用条件变量。 它的工作方式是您的条件位于主线程设置为指示工作线程应继续的某个共享变量之上。 您确实需要互斥锁,因为您确实有一个共享资源 - 主线程设置和工作线程读取的共享变量。

像这样:

/* shared variables */
int run_iteration = -1;
pthread_mutex_t iteration_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t iteration_cond = PTHREAD_COND_INITIALIZER;

工作线程:

int current_iteration = 0;
while (... )
{
/* Wait for main to signal start of current_iteration */
pthread_mutex_lock(&iteration_lock);
while (run_iteration < current_iteration)
pthread_cond_wait(&iteration_cond, &iteration_lock);
pthread_mutex_unlock(&iteration_lock);
/* ... Execute current_iteration ... */
current_iteration++;
}

主线程:

/* signal start of next iteration */
pthread_mutex_lock(&iteration_lock);
run_iteration++;
pthread_cond_broadcast(&iteration_cond);
pthread_mutex_unlock(&iteration_lock);

或者,如果你需要你的线程同步运行,那么可以使用线程屏障(pthread_barrier_t(来代替。

最新更新