我有一个问题: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
}
如何修复此代码以确保线程安全? 谢谢!
答案 0 :(得分:6)
这取决于你想做什么。如果你所做的只是从他们那里读书,那么是的。如果你也写信给他们并且一个单独的线程试图做其他任何事情,或者有生命迭代器,它将无法按预期工作。
答案 1 :(得分:3)
C ++标准对此没有任何说明.1您将需要查看您正在使用的标准库的特定实现的文档。但它很可能不是线程安全的,因此您需要自己进行同步。
(如果你想知道如何做到这一点,那么这是一个不同的问题主题......)
<小时/> <子> 1。预C11。子>
答案 2 :(得分:3)
不,它们未定义为线程安全。您必须在标准库容器之上添加同步机制。