簡體   English   中英

std :: map和std :: set線程安全嗎?

[英]Are std::map and std::set thread-safe?

我有一個問題:std :: map和std :: set線程安全嗎? 我在多線程應用程序上使用此集合,有時會映射並設置耗損的工作。

謝謝!

更新。 我的代碼:

std::map<int, unsigned long> ClientTable;

int sendulong(int socket, char * data) //<--- Many threads uses this function
{
  write(socket, ClientTable[socket]); //<--- ClientTable[[socket] <-- using of map
}

如何修復此代碼以確保線程安全? 謝謝!

這取決於您想做什么。 如果您正在做的就是從他們那里閱讀,那就可以。 如果您還寫信給他們,並且有單獨的線程嘗試執行其他任何操作,或者有活動的迭代器,則它將無法按預期工作。

C ++標准對此一無所獲。1您將不得不查看所使用標准庫的特定實現的文檔。 但是很有可能它不是線程安全的,因此您需要自己進行同步。

(如果您想知道該怎么做,那是一個不同的問題主題...)


1. C11之前的版本。

不,它們的定義不是線程安全的。 您必須在標准庫容器的頂部添加同步機制。

暫無
暫無

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

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