簡體   English   中英

線程安全性std :: vector push_back並保留

[英]Thread safety std::vector push_back and reserve

我有一個將std :: vector :: push_back元素連續轉換為向量的應用程序。 由於它是一個實時系統,因此我無法承受任何時間的停頓 不幸的是,當保留的內存用盡時,push_back自動內存分配確實會導致停頓(在我的測量中長達800ms)。

我通過第二個線程監視可用內存的時間並在必要時調用std :: vector :: reserve來解決了該問題。

我的問題是:同時執行reserve和push_back是否安全?

(顯然是在push_back不會重新分配內存的假設下)

謝謝!

它不是線程安全的,因為向量是連續的,並且如果向量變大,則可能需要將向量的內容移動到內存中的其他位置。

正如stefan所建議的那樣,您可以查看非阻塞隊列或具有向量列表(或向量),以便在需要更多空間時,另一個線程可以為您保留一個新向量,而不會阻塞原始向量進行查找。 您只需要重新映射索引即可在列表中查找正確的向量。

沒有。

線程安全性概念僅在C ++ 11中存在。 它是相對於const定義的。 在C ++ 11標准庫中, const現在表示thread-safe 這兩個方法都不是const ,所以不,它不是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM