1

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

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

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

谢谢

4

1 回答 1

4

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

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

于 2012-05-21T16:54:47.180 回答