gpt4 book ai didi

pthreads - pthread条件变量

转载 作者:行者123 更新时间:2023-12-02 10:13:53 25 4
gpt4 key购买 nike

我正在实现一个带有任务队列的线程。一旦第一个任务被添加到队列中,线程就开始运行它。

我应该使用pthread条件变量来唤醒线程还是有更合适的机制?

如果我在另一个线程没有被 pthread_cond_wait() 阻塞而是执行某些操作时调用 pthread_cond_signal(),会发生什么?信号会丢失吗?

最佳答案

当且仅当您的队列已经是线程安全的时,信号量才是好的。还,一些信号量实现可能受到顶部计数器值的限制。即使您不太可能超出最大值。

最简单且正确的方法如下:

pthread_mutex_t queue_lock;
pthread_cond_t not_empty;
queue_t queue;

push()
{
pthread_mutex_lock(&queue_lock);
queue.insert(new_job);
pthread_cond_signal(&not_empty)
pthread_mutex_unlock(&queue_lock);
}
pop()
{
pthread_mutex_lock(&queue_lock);
if(queue.empty())
pthread_cond_wait(&queue_lock,&not_empty);
job=quque.pop();
pthread_mutex_unlock(&queue_lock);
}

关于pthreads - pthread条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/525478/

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