- 論壇徽章:
- 0
|
本帖最后由 xhl 于 2011-12-22 23:08 編輯
hy036630 發(fā)表于 2011-12-21 14:58 ![]()
不好意思 可能我上面沒有說清楚
我用的是下面這個環(huán)形隊列 無鎖的實現(xiàn)一個進程讀,一個進程寫,沒有牽涉 ...
先不說性能問題, 你用這樣的環(huán)形隊列實現(xiàn)lockfree肯定有問題, 因為你的push_count, push_index, pop_count, pop_index沒有原子操作保護。
多個線程下, 可能會出現(xiàn)問題的。
而且按你的思路, 你的生產(chǎn)消費關(guān)系不應(yīng)該是兩邊死循環(huán)的一個push, 一個get, 這個是非常不經(jīng)濟的。
你應(yīng)該讓讓一邊一直生產(chǎn), 一邊每間隔一段時間, 取出一批循環(huán)處理, 這樣才能真正發(fā)揮多核心生產(chǎn)線的優(yōu)勢。 你的模型大部分時間多個線程之間都沒在做有意義的事情, 都在輪訓(xùn)判斷那個隊列是否可取或者可以放。
所以我認為你的模型沒必要用lockfreequeue, 直接用普通mutex就可以了, 最好做到批量生產(chǎn), 批量消費, 不要上鎖做業(yè)務(wù), 把一批做完, 上鎖掛一批指針, 取也是, 上鎖取一批指針, 然后死循環(huán)做業(yè)務(wù)。
鎖的機會很少, 保證多個線程幾乎能同跑做業(yè)務(wù)。 |
|