[英]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您將不得不查看所使用標准庫的特定實現的文檔。 但是很有可能它不是線程安全的,因此您需要自己進行同步。
(如果您想知道該怎么做,那是一個不同的問題主題...)
不,它們的定義不是線程安全的。 您必須在標准庫容器的頂部添加同步機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.