我在 1Reader 线程/1Writer 线程设置中使用规范环形缓冲区实现。
由于读取器在缓冲区为空时循环[编写器在缓冲区已满时循环]并不断轮询控制变量,因此我调用pthread_yield(在我的情况下只是sched_yield的包装器(以优先考虑系统中的其他线程。我没有使用任何互斥锁,因为它不是正常运行所必需的。
有没有更好的方法来减轻轮询效应(又名 CPU 燃烧(?我在考虑 pthread 的条件变量 - 因为我主要是在没有数据 [没有空间] 时阻塞线程 - 但我担心可能会引入开销。
谢谢
使用条件变量,开销比忙于等待要低得多,并且正确使用互斥锁可确保您的数据在您期望时实际存在(因为它们强制执行排序(。
此外,如果一般情况下确实不需要互斥锁,则锁争用应该很低甚至不存在。