gpt4 book ai didi

c++ - 为什么这个函数级静态变量在 AIX 和 Solaris 中不是线程安全的?

转载 作者:行者123 更新时间:2023-11-30 03:24:58 26 4
gpt4 key购买 nike

我有这个简单的功能:

bool foo(const std::string& str)
{
static const std::string ky[] = { "KeyWord1", "KeyWord2", "KeyWord3" };

static const std::set<std::string> kySet(ky, ky+ sizeof(ky)/sizeof(ky[0]));

return kySet.find(str) != kySet.end();
}

它基本上包含一组预设的关键字,并测试给定的字符串是否是其中一个关键字。

我使用 static 因为我只需要一个预设变量的拷贝。

这将在多线程环境和不同的架构上运行。但是,有人告诉我这仅在 Linux 上是线程安全的,但在 AIX 和 Solaris 上会中断。

我不明白为什么它会坏掉?

最佳答案

引用自03标准 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf

6.7节

An implementation is permitted to perform early initialization of other local objects with static storage duration under the same conditions that an implementation is permitted to statically initialize an object with static storage duration in namespace scope (3.6.2). Otherwise such an object is initialized the first time control passes through its declaration; such an object is considered initialized upon the completion of its initialization.

没有提到线程;因此,您应该认为函数静态不是线程安全的,除非该函数是在单线程时调用的。

关于c++ - 为什么这个函数级静态变量在 AIX 和 Solaris 中不是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49317459/

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