1

我有一个问题: 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
}

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

4

3 回答 3

7

这取决于你想做什么。如果您所做的只是从他们那里阅读,那么是的。如果您还写信给它们,并且一个单独的线程尝试做任何其他事情,或者有活的迭代器,它就不会按预期工作。

于 2012-07-08T11:37:33.740 回答
4

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

于 2012-07-08T11:33:31.113 回答
3

C++ 标准对此只字未提。1 您必须查看文档以了解您正在使用的标准库的特定实现。但它很可能不是线程安全的,因此您需要自己进行同步。

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


1. C11 前。

于 2012-07-08T11:33:28.010 回答