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