是局部unordered_map变量线程在C 中安全的线程

is local unordered_map variable thread safe in c++

本文关键字:线程 安全 变量 局部 unordered map      更新时间:2023-10-16

我是C 的新手。我对std::mapstd::unordered_map的局部变量使用情况有一个线程安全的问题。

如果我在函数中声明 std::mapstd::unordered_map的本地变量,并且想要插入元素或增加函数内局部变量中的元素值,那么这些局部变量线程安全是当函数通过多个无锁的多个线程调用的函数时?

示例代码:

void func(const std::string &a, int b)
{
    std::map<std::string, int> var1;
    auto search = var1.find(a)
    if ( search != var1.end() )
    {
       var1.insert(make_pair(a,b) );
    }
    else
    {
       var1[a] = var1[a] + b;
    }
    std::unordered_map<std::string, int> var2;
    auto search = var2.find(a)
    if ( search != var2.end() )
    {
       var2.insert(make_pair(a,b) );
    }
    else
    {
       var2[a] = var2[a] + b;
    }
}

func()将通过多个线程调用。var1var2线程是否安全?或者,是否需要在功能中使用Mutex锁?

函数的每个调用都有其自己的局部变量。您可以从多个线程安全地调用此功能。