【发布时间】:2016-11-17 20:01:14
【问题描述】:
This paper 表示setlocale() 是线程不安全的。是否有任何线程安全的方法来设置语言环境。
我使用 C++ 进行编码,但如果有任何不同,C 库中的函数将使用语言环境。
这基本上就是我现在正在做的事情:
const char* loc_old = std::setlocale(ltype, 0);
std::setlocale(ltype, mylocale.c_str()); //change the locale
//call some C functions
std::setlocale(ltype, loc_old); //restore the locale
解决方案必须是可移植的,而不是>=C++11
【问题讨论】:
-
应用程序全局语言环境,没有。您必须实例化离散的
std::locale对象,并将它们灌输到任何地方,以保证线程安全。既然 C++ 有thread_local,那么应该有一个默认的thread_local语言环境,而新的执行std::threads 从它们的父线程继承一个。 -
@SamVarshavchik : 不幸的是,
thread_local不适合我..
标签: c++ multithreading