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

Rob*_*ert 0 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
}
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*ore 6

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

  • 您必须分隔_modifying容器结构_和_modifying容器_中的项目.通常,您可以同时修改容器中的两个不同元素,而不会引入数据争用. (2认同)