看起来有点像一个愚蠢的问题,但它让我思考......
根据here,time
在兼容系统上必须是线程安全的,对吗?无论函数的参数如何,此要求都成立。如果提供NULL
参数,则列出的一些函数不需要是线程安全的,并且不包括time
。
所以看起来任何符合POSIX
标准的系统都应该具有time
的线程安全实现。
但是,POSIX系统是否可以选择在实际使其成为指针且仍然符合的问题中实现time_t
?因此,如果提供一个NULL参数来存储结果,那么它的线程安全上的所有下注都不会被关闭,因为它可能会返回指向某个静态存储的指针吗?或者time_t
是否有一些我在这方面缺少的要求或惯例?
我如何才能最好地验证time
在UNIX
个平台上是否具有线程安全性?特别是AIX
,HP-UX
,Linux
和Solaris
。在调试器中单步执行反汇编可能会有效,但实现可能会更改。
答案 0 :(得分:4)
是的,它是线程安全的。
time_t time( NULL );
如果它实现了一个内部值,那么在它返回时,它总是必须从内部值复制到返回值(寄存器?)。该副本将使其成为线程安全的,因为它适用于所有现代处理器的单一副本。
mov eax, static_internal_value
return
想象一下,并非如此,并且有2个主题进入。他们都会复制出同样的价值 - 再次,无法看出这是不正确的。
thread 1 thread 2
mov eax, static_internal_value
mov eax, static_internal_value
return
return