std::map和std::set是线程安全的
Are std::map and std::set thread-safe?
我有一个问题: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.
相关文章:
- 通过网络、跨平台传递std::变体是否安全
- 在std::thread中,joinable()然后join()线程安全吗
- 使用std::istream::peek()总是安全的吗
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- std::memmove在同一对象之间是否始终安全
- 从其存储的回调中删除 std::函数是否安全
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 我可以对 std::array 使用自定义分配器来获取安全加密密钥吗?
- 安全回调提供程序(SFINAE,std::正向和过载解析)
- 如果迭代器没有因插入而无效,则使用std::find和C::insert()是线程安全的
- std::weak_ptr<T>::锁定线程安全吗?
- std::shared_ptr::unique(),复制和线程安全
- 通过std::shared_ptr使用Rcpp和RcppParallel的线程安全函数指针
- 附加类型安全的子类std::string
- 我们如何使std::uniform_int_distribution加密安全
- std::mutex作为一个成员变量对多个线程来说是安全的吗
- std::free线程安全吗
- 为什么我的 std::atomic<int> 变量不是线程安全的?
- 访问"std::vector"的保留但未调整大小的内存作为原始内存是否安全?
- c++类用STD安全指针相互链接(c++)