- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个简单的功能:
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/
我是一名优秀的程序员,十分优秀!