localtime函數(shù)用法 為什么localtime函數(shù)是線程不安全的?
為什么localtime函數(shù)是線程不安全的?根據(jù)Localtime函數(shù)的原型定義進(jìn)行分析struct TM*Localtime(const time)函數(shù)返回struct TM指針,在函數(shù)描述中不要求
為什么localtime函數(shù)是線程不安全的?
根據(jù)Localtime函數(shù)的原型定義進(jìn)行分析
struct TM*Localtime(const time)函數(shù)返回struct TM指針,在函數(shù)描述中不要求是自由的,證明TM對(duì)象不是malloc或new。那么TM必須是Localtime函數(shù)中的全局變量或局部靜態(tài)變量。
這樣的變量在多線程訪問(wèn)時(shí)會(huì)出現(xiàn)問(wèn)題。第一個(gè)線程在返回Localtime之前更改變量的值,第二個(gè)線程再次更改變量,依此類(lèi)推。這樣,當(dāng)?shù)谝粋€(gè)線程實(shí)際返回時(shí),值被更改了很多次,這是一個(gè)典型的函數(shù)重入問(wèn)題。
因此,Localtime函數(shù)線程不安全。
時(shí)間函數(shù)gmtime和localtime有什么區(qū)別?
1. 本地時(shí)間是從1970-1-1零點(diǎn)到當(dāng)前時(shí)間系統(tǒng)的偏移秒數(shù),轉(zhuǎn)換為本地時(shí)間。gmtime函數(shù)轉(zhuǎn)換的時(shí)間是UTC時(shí)間,沒(méi)有時(shí)區(qū)轉(zhuǎn)換。
2. 注:此函數(shù)得到的TM結(jié)構(gòu)時(shí)間為日歷時(shí)間。
3. 用法:structtm*本地時(shí)間(consttime) uT*時(shí)鐘
4。返回值:返回指向TM結(jié)構(gòu)的指針。TM結(jié)構(gòu)是一種時(shí)間結(jié)構(gòu)。H存儲(chǔ)時(shí)間量(月、年、日等)
5