【发布时间】:2009-06-27 05:30:49
【问题描述】:
我记得读过在方法中声明的静态变量不是线程安全的。 (见Todd Gardner提到的What about the Meyer's singleton?)
Dog* MyClass::BadMethod()
{
static Dog dog("Lassie");
return &dog;
}
我的库生成 C++ 代码供最终用户编译,作为其应用程序的一部分。它生成的代码需要以线程安全的跨平台方式初始化静态变量。我想使用boost::call_once 对变量初始化进行互斥,但最终用户会暴露于 Boost 依赖项。
有没有办法让我做到这一点,而无需对最终用户施加额外的依赖?
【问题讨论】:
-
您还可以将 boost 库中的静态链接到您自己的库中,然后您可以随意使用 boost,而不必担心给您的用户带来不便。
-
@LucianAdrianGrijincu,这个问题早于 C++11(它发布于 2009 年),所以虽然你的问题是相关的,但它并不是一个严格的重复。感谢您的链接。
标签: c++ boost initialization thread-safety c++03