2012-05-21 70 views
1

我在1Reader线程/ 1Writer线程设置中使用规范环形缓冲区实现。缓解环形缓冲区中轮询效应的策略

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

有没有更好的方法来减轻轮询效应(又名CPU烧录)?我正在考虑pthread的条件变量 - 因为当没有数据时[无空间]我大部分会阻塞这个线程 - 但是我担心会引入开销。

感谢

回答

4

使用条件变量的开销比忙等待下,并正确使用互斥确保您的数据实际上是存在,当你想到它是(因为他们强制排序)。另外,如果你确实不需要一般情况下的互斥锁,那么锁定争用应该是低到不存在的。