5個生產者線程 5個消費者線程 共同操作一個vector 如何提高效率

 

面試題目:

有5個生產者線程,5個消費者線程,有一個它們公共訪問的資源,使用vector存儲了這些資源, 生產者用於生產資源,消費者用於消耗資源,消費者也會從容器中進行刪除動作。 當前的方案是使用一個互斥鎖對vector進行保護,生產者、消費者線程在訪問資源之前必須先獲得鎖。 但是,生產者、消費者的併發頻率非常高,鎖導致了效率低下,請給出提高效率的方案。


1)面試時相出來的想法:

用10個vector, 每個生產者使用固定的兩個,生產線程先向其中一個vector放數據,放滿後再向另一個放,然後,所有的消費者線程只從當前沒有正被操作的vector中取數據。

-- 只是提出了一個思路,interviewer說可以! 想法的重要性啊。 

這種方案的有點應該是使得鎖的粒度更小了,有利於提高併發性。


2)  面試時相出來的想法:

爲生產者和消費者劃分時間片,兩者輪轉,以解決生產者和消費者之間的競爭。    ---  不行!被否!


3)其他想法:

更換數據結構,例如使用一個隊列,生產者線程向隊頭放,消費者從對尾取。--- 由此,想到c++併發編程書籍中提到的無鎖結構!經查閱,這是一種需要仔細學習的c++ 領域。

《C++ Concurrency in Action 2nd Edition》very good!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章