gpt4 book ai didi

c++ - 为什么在函数内部使用 thread_local?

转载 作者:行者123 更新时间:2023-12-02 16:04:31 25 4
gpt4 key购买 nike

我认为如果函数不修改非本地数据,它们就是线程安全的。

根据这个answer,我的假设是正确的.但是,最近我遇到了这段代码,

int intRand(const int & min, const int & max) {
static thread_local std::mt19937 generator;
std::uniform_int_distribution<int> distribution(min,max);
return distribution(generator);
}

代码让我感到困惑。如果函数已经是线程安全的,为什么还要使用 thread_local

最佳答案

标准库的随机数生成器(包括示例中使用的std::mt19937)不得在多线程中无序使用。 thread_local 保证每个线程都有自己的生成器,这使得从多个线程中调用函数成为可能。

I thought functions are thread safe if they don't modify non-local data.

静态存储是非本地的。即使具有静态存储持续时间的变量是局部变量也是如此。名字是本地的;存储是全局的。

关于c++ - 为什么在函数内部使用 thread_local?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69774068/

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