問題:
多個執行緒可以同時呼叫push_back () 共用 std::vector 物件上的方法而不影響執行緒安全?或者,使用者是否需要實現額外的同步機制?
答案:
與流行的假設相反,標準C 向量(std::vector) 和Boost向量(boost::vector)依照C標準提供有限的線程安全保證。
線程安全保證:
這些保證可能與執行緒安全的典型期望不一致,但考慮到標準容器的設計,它們是明智的,它優先考慮單線程場景中的高效訪問。在方法中加入鎖定機制會阻礙這種效率。
外部鎖定:
為了確保多執行緒並發存取容器時的執行緒安全,必須實現外部同步機制。具體要求在 C 標準第 17.6.4.10 節 [res.on.objects] 第 1 段中概述。
Boost Vector 注意事項:
執行緒安全保證考慮到它們的介面相似,Boost 向量的期望與標準向量的相同。然而,為了確保安全的並發訪問,外部鎖定仍然是必要的。
結論:
雖然標準 C 和 Boost 向量提供了一定的線程安全保證,但它們是有限的。為了在多執行緒場景下實現完整的執行緒安全,必須採用外部同步機制來防止資料競爭。
以上是標準 C 和 Boost 向量對於併發 `push_back()` 操作是線程安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!