Pthread条件变量是连续轮询的替代品,是真的吗

Pthread Condition variables are a replacement for continuous polling, is it true?

本文关键字:替代品 是真的吗 条件 变量 连续 Pthread      更新时间:2023-10-16

我了解到pthread条件变量提供了替换轮询的功能。如果没有条件变量,程序员将需要让线程持续轮询(可能在关键部分),以检查条件是否得到满足。这可能非常耗费资源,因为线程在该活动中将持续繁忙。条件变量是在不进行轮询的情况下实现相同目标的一种方法。但为什么在代码中,无论是否使用条件,我都需要不断地检查变量。那么,使用条件变量有什么好处呢?

  pthread_mutex_lock(&count_mutex);
  while (count<COUNT_LIMIT) {
    pthread_cond_wait(&count_threshold_cv, &count_mutex);
    printf("watch_count(): thread %ld Condition signal received.n", my_id);
    count += 125;
    printf("watch_count(): thread %ld count now = %d.n", my_id, count);
  }
  pthread_mutex_unlock(&count_mutex);

现在,在上面的例子中,我看到我需要轮询是否使用条件变量。那么在不需要轮询的意义上,条件变量的好处是什么互斥可以通过if(count check.实现必要的同步

那么,为什么我要在这里使用条件变量来代替对变量的轮询呢?它还在这里使用。为什么我不能用互斥和一个简单的if子句来实现同样的事情呢?最后,我想对条件变量实际解决的问题有一个清晰的想法?

示例中的循环要么从不运行,要么只运行一次,它从不循环(除非pthread以某种方式失败——为此,它是一个循环,而不是简单的if)。阅读评论:

此外,请注意,如果在运行此例程之前达到COUNT_LMIT等待线程将跳过循环以防止pthread_cond_wait从不返回。

当你到达那里时,条件已经满足,这是一种预防措施,这样你就不会永远等待。

一旦条件变量被唤醒,count变量被递增,从而循环将退出(递增125,COUNT_LIMIT为12)。

这是一个多线程程序。你不能只看一个分离的函数,就试图理解它的作用,而忽略其他线程。