在寫代碼的時候,經常會用到讀取系統時間的函數。很多人都會調用localtime函數來將時間轉換本地時間,但是大家往往會忽略了一點,localtime函數不是線程安全的。如果在多線程里調用localtime函數,很可能會出現問題。
struct tm *localtime(const time_t *clock);
這個函數在返回的時候,返回的是一個指針,實際的內存是localtime內部通過static申請的靜態內存,所以通過localtime調用后的返回值不及時使用的話,很有可能被其他線程localtime調用所覆蓋掉
多線程應用里面,應該用localtime_r函數替代localtime函數,因為localtime_r是線程安全的。
struct tm* localtime_r( const time_t* timer, struct tm* result );