mktime的手册页没有提到mktime的线程安全性,但它确实提到了这个看起来像线程不安全:
调用mktime()还会将外部变量tzname设置为有关当前时区的信息。
我知道在Linux上mktime调用tzset来设置tzname,这是一个char * []:
extern char * tzname [2];
和tzset将读取环境变量TZ和文件/ etc / localtime。因此,除非mktime使用互斥锁来保护所有这些操作,否则我无法看到它是如何线程安全的。
答案 0 :(得分:9)
mktime
确实存在副作用,但在大多数程序中副作用应该是无害的。
根据POSIX,副作用就像调用tzset一样,而后者只是将时区信息从TZ
环境变量复制到tzname
C字符串数组。如果您的应用程序没有更改TZ
,那么同时调用mktime()
就没有问题。
除此之外,GNU libc的tzset
does use a mutex可以保护tzname
的完整性。这是标准不能保证的实施质量。