【问题标题】:Strategies to mitigate polling effects in ring buffers减轻环形缓冲区中轮询效应的策略
【发布时间】:2012-05-28 04:33:03
【问题描述】:

我在 1Reader 线程/1Writer 线程设置中使用规范的环形缓冲区实现。

由于读取器在缓冲区为空时循环[写入器在缓冲区满时循环]并不断轮询控制变量,因此我调用 pthread_yield(在我的情况下它只是 sched_yield 的包装器)以优先考虑其他线程在系统中。我没有使用任何互斥锁,因为正常运行不需要它。

有没有更好的方法来减轻轮询效应(也就是 CPU 燃烧)?我在考虑 pthread 的条件变量——因为我主要在没有数据 [没有空间] 时阻塞线程——但我担心会引入开销。

谢谢

【问题讨论】:

    标签: c pthreads conditional-statements polling circular-buffer


    【解决方案1】:

    使用条件变量,开销比忙碌等待低,并且正确使用互斥锁可确保您的数据在您期望的时候确实存在(因为它们强制执行排序)。

    另外,如果你真的不需要在一般情况下使用互斥锁,锁争用应该很低甚至不存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多