std :: map和std :: set是否是线程安全的?

时间:2012-07-08 11:32:04

标签: c++ map set

我有一个问题:std :: map和std :: set是否是线程安全的?我在我的多线程应用程序上使用这个集合,有时候映射和设置工作。

谢谢!

UPD。我的代码:

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
}

如何修复此代码以确保线程安全? 谢谢!

3 个答案:

答案 0 :(得分:6)

这取决于你想做什么。如果你所做的只是从他们那里读书,那么是的。如果你也写信给他们并且一个单独的线程试图做其他任何事情,或者有生命迭代器,它将无法按预期工作。

答案 1 :(得分:3)

C ++标准对此没有任何说明.1您将需要查看您正在使用的标准库的特定实现的文档。但它很可能不是线程安全的,因此您需要自己进行同步。

(如果你想知道如何做到这一点,那么这是一个不同的问题主题......)

<小时/> <子> 1。预C11。

答案 2 :(得分:3)

不,它们未定义为线程安全。您必须在标准库容器之上添加同步机制。