c – 是否具有setlocale线程安全功能?

我需要在线程中更改区域设置以正确解析带有strtod()的double,我正在使用setlocale()来实现此(C).它是线程安全的吗?

更新:另一个问题.当我在main()函数中调用setlocale()时,它不会更深入地影响其他例程.为什么???有很多代码,所以编写块有问题.

解决方法:

您需要查阅文档以了解您正在使用的任何实现. C目前没有指定任何关于线程的内容,所以它归结为实现(你还没有告诉我们).

例如,我的s​​etlocale的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
上一篇:bootstrap之栅格化


下一篇:php – 在Laravel中为日期配置荷兰语格式