8

mktime 的手册页没有提到 mktime 的线程安全,但确实提到了这一点,这使它看起来像线程不安全

调用 mktime() 还会使用有关当前时区的信息设置外部变量 tzname。

我知道在 Linux mktime 上调用 tzset 来设置 tzname,它是一个 char*[]:

外部字符 *tzname[2];

tzset 将读取环境变量 TZ 和文件 /etc/localtime。因此,除非 mktime 使用互斥锁来保护所有这些操作,否则我看不出它如何是线程安全的。

4

1 回答 1

10

确实mktime有副作用,但副作用在大多数程序中应该是无害的。

根据POSIX,副作用就像调用了tzset一样,这反过来只是将时区信息从TZ环境变量复制到tznameC 字符串数组。如果您的应用程序没有更改,那么并发TZ调用不会有任何问题。mktime()

除此之外,GNU libctzset 确实使用互斥锁来保护tzname. 这是标准不保证的实施质量添加。

于 2013-08-21T10:45:17.963 回答