我需要在线程中更改区域设置以正确解析带有strtod()的double,我正在使用setlocale()来实现此(C).它是线程安全的吗?
更新:另一个问题.当我在main()函数中调用setlocale()时,它不会更深入地影响其他例程.为什么???有很多代码,所以编写块有问题.
解决方法:
您需要查阅文档以了解您正在使用的任何实现. C目前没有指定任何关于线程的内容,所以它归结为实现(你还没有告诉我们).
例如,我的setlocale的Linux手册页有以下代码段:
This string may be allocated in static storage.
这并不是绝对表明它的线程不安全但我会非常谨慎.用NULL(即查询)调用它可能是线程安全的,但是一旦你有一个线程修改它,所有的赌注都会被关闭.
可能最安全的做法(假设它不是线程安全的)将保护所有使用互斥锁的setlocale调用,并具有一个特殊的函数来格式化你的数字:
claim mutex
curr = setlocale to specific value
format number to string
setlocale to curr
release mutex
return string