我有这个简单的功能:

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节



没有提到线程。因此,除非单线程调用了函数,否则应该考虑函数静态变量不是线程安全的。

07-27 16:23