為什么localtime函數是線程不安全的?
從localtime函數的原型定義分析
struct tm *localtime(const time_t *timep);
localtime函數返回了一個struct tm指針,函數的說明中并未要求調用者將該指針free掉,證明tm對象并非是malloc或new出來的。那么tm一定是個全局變量或者是localtime函數中的局部靜態變量。
這樣的變量在多線程訪問時會出問題,第一個線程在localtime返回之前首先改變了這個變量的值,第二個線程又進來改變這個變量,以此類推。這樣第一個線程在真正返回時該值已經被多次改變,這是典型的函數重入問題。
因此localtime函數線程不安全。