【发布时间】:2018-08-25 07:50:49
【问题描述】:
我有这个简单的功能:
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 上会中断。
我不明白它为什么会坏?
【问题讨论】:
-
数组和集合都需要什么?您的编译器是否过时无法处理 C++11 初始化程序列表?
-
@Someprogrammerdude 是的,它在 C++03 遗留代码库中。
-
C++03 不是线程安全的。
-
旁白:您可能应该在问题中提到 c++03。
-
魔术静态是 C++14 的一个特性。你 a) 确定你的编译器支持 C++14 吗? b) 将您的代码编译为 C++14?
标签: c++ multithreading thread-safety solaris aix