gpt4 book ai didi

c - 创建许多线程条件变量和互斥量是否合理/明智?

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:21 27 4
gpt4 key购买 nike

我有一个包含 1+N 个线程和 N 个 FIFO 队列的程序,例如:FIFO_queue_t* fifo_queque[N]。一个线程负责填充这 N 个 FIFO 队列。并且其他每个线程都与 1 个 FIFO 队列相关。

对于每个其他线程 i ,它不断检查其 FIFO 队列 fifo_queue[i] 是否为空,如果它不为空,则它们从 fifo_queue 中取出所有元素并再次使 fifo_queue 为空。

现在的问题是如何进行检查(如果您愿意,也可以进行轮询)。一种方法是

  for(;;)
{
if(fifo_queue[i] != NULL)
{
fetch_all_element();
}
}

这样一来,可能会很耗CPU?所以另一种方法是使用 pthread_cond_t 变量,

     for(;;){
pthread_mutex_lock(&mut);
if(fifo_queue[i] == NULL) {
pthread_cond_wait(&cond, &mut);
fetch_all_element();
}
pthread_mutex_unlock(&mut);
}

但是这样一来,我需要为 N 个线程创建 N 个条件变量和互斥量。很耗资源吗?有没有什么好的方法可以在这种情况下阻塞线程直到它被满足?谢谢!

最佳答案

看起来您填充队列的线程应该在填充整个队列时向其他线程发出信号。虽然所有条件变量的设置都非常耗时,而且程序已经超出了这个初始阶段,但它应该运行得更快,因为您不会浪费 CPU 时间与 N 个线程循环。相反,将运行 1 个线程(填满队列的主线程),然后在必须时,它会向一个线程发出信号,该线程将开始执行。主线程是否继续执行取决于您,因为您可能需要添加更多互斥锁以确保主线程不会践踏任何其他线程。

关于c - 创建许多线程条件变量和互斥量是否合理/明智?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16527540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com