多執行緒下std list的遍歷與push

2021-05-25 15:07:13 字數 453 閱讀 9803

乙個執行緒往list中push資料,乙個執行緒遍歷該list然後進行操作。沒有試驗,我猜測可能會有多執行緒安全問題。

解決辦法,如果對遍歷的資料進行加鎖,可能性能有損失。我使用了如下這種方法,記錄在案。

使用乙個臨時的list,比如,

std::listreadables; //遍歷時使用的

std::listreadables_tmp; //push資料的時候使用的。在遍歷之前,再將此list中的資料移到readables中去。

插入執行緒中:

cautolock( &cs );

readables_tmp.push_back( index );

遍歷執行緒中:

for( readables.begin();readables.end();......)

因為只是將新增的臨時list中的資料移動到readables中,所以時間比較快。應該有效率提公升。

std vector與std list的效率比較

一直想知道std中vector和list的效率哪個高些。於是做了乙個簡單的測試,對std vector和list的push back與遍歷操作的效率進行比較。結果如下 1.push back操作 連續push back操作100000個元素,然後clear 一直重複10000次。vector耗時13...

std vector與std list的區別

vector std vector是一種順序容器,可以存放任意型別的物件,如int double bool等 它是乙個動態的陣列 即不需要像普通陣列 如int a 10 一樣預先分配元素個數,它可以根據插入的元素的多少來擴充對應的容量,一般是原先的1.5 2倍。實質為,把之前的資料複製到新的陣列中,...

MFC多執行緒與多執行緒的同步

dword winapi threadproc lpvoid lpparameter 注意這裡threadproc這個名字是可以按自己的要求修改的 handle winapi createthread lpsecurity attributes lpthreadattributes,安全性 size...