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

Are std::map and std::set thread-safe?

本文关键字:std 安全 线程 set map      更新时间:2023-10-16

我有一个问题: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.Pre-C11.