淘先锋技术网

首页 1 2 3 4 5 6 7

为什么localtime函数是线程不安全的?

从localtime函数的原型定义分析

struct tm *localtime(const time_t *timep);

localtime函数返回了一个struct tm指针,函数的说明中并未要求调用者将该指针free掉,证明tm对象并非是malloc或new出来的。那么tm一定是个全局变量或者是localtime函数中的局部静态变量。

这样的变量在多线程访问时会出问题,第一个线程在localtime返回之前首先改变了这个变量的值,第二个线程又进来改变这个变量,以此类推。这样第一个线程在真正返回时该值已经被多次改变,这是典型的函数重入问题。

因此localtime函数线程不安全。

多线程静态变量java,为什么localtime函数是线程不安全的