mktime的手册页面没有提到mktime的线程安全性,但是它确实提到了这一点,这使得它看起来像线程不安全的。
调用mktime()还使用有关当前时区的信息设置外部变量tzname。
我知道在Linux上,mktime调用tzset来设置tzname,这是char*[]:
外焦2;
而tzset将读取环境变量TZ和文件/etc/localtime。因此,除非mktime使用互斥锁来保护所有这些操作,否则我看不出它如何是线程安全的。
发布于 2013-08-21 10:45:17
的确,mktime
有副作用,但在大多数程序中,副作用应该是无害的。
根据POSIX,副作用就像调用了tzset一样,这反过来只是将时区信息从TZ
环境变量复制到C字符串的tzname
数组中。如果应用程序不更改TZ
,那么并发调用mktime()
就没有问题。
除此之外,GNU的tzset
does use a mutex保护tzname
的完整性。这是一个质量的实施补充,没有保证的标准.
https://stackoverflow.com/questions/18355101
复制相似问题