2012-05-21 47 views
1

我在1Reader線程/ 1Writer線程設置中使用規範環形緩衝區實現。緩解環形緩衝區中輪詢效應的策略

由於讀寫器在緩衝區爲空[寫入程序在緩衝區滿時循環]並連續輪詢控制變量時循環,因此我調用pthread_yield(在我的情況下只是sched_yield的包裝)以優先考慮其他線程在系統中。我沒有使用任何互斥鎖,因爲它不需要正常運行。

有沒有更好的方法來減輕輪詢效應(又名CPU燒錄)?我正在考慮pthread的條件變量 - 因爲當沒有數據時[無空間]我大部分會阻塞這個線程 - 但是我擔心會引入開銷。

感謝

回答

4

使用條件變量的開銷比忙等待下,並正確使用互斥確保您的數據實際上是存在,當你想到它是(因爲他們強制排序)。另外,如果你確實不需要一般情況下的互斥鎖,那麼鎖定爭用應該是低到不存在的。