gpt4 book ai didi

c++ - 在 TLS 中存储映射 - C++ 中的线程安全

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:45 25 4
gpt4 key购买 nike

基本上一个map是不能被两个不同线程同时增/删的,所以需要同步。

而且我知道 c++ 中的线程本地存储概念是线程安全的,可以被多个线程访问。

    std::map<int,int> * pTemp= (std::map<int,int> *) TlsGetValue(sTlsIndex);
if (pTemp== NULL)
{
pTemp= new std::map<int,int>;
TlsSetValue(sTlsIndex, pTemp);
}

如果我将 map 放入 TLS 并从不同的子线程访问它添加/删除/修改 map ,那么它应该同步吗?

因为 TLS 已经同步并且我的 map 在其中。

最佳答案

" thread safe and can be accessed by many threads"

您误解了线程本地存储 - 它透明地为每个线程创建不同的对象,以便该线程可以轻松/快速地找到它们并安全地使用它们尽管不是线程安全的

如果你想让多个线程访问同一个映射,你不应该把它放在线程本地存储中,应该使用std::mutex或类似的同步原语来控制访问和更新。

关于c++ - 在 TLS 中存储映射 - C++ 中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com