Kiz*_*aru 7 c multithreading posix
看起来有点像一个愚蠢的问题,但它让我思考......
根据这里,time要求在兼容系统上是线程安全的,对吗?无论函数的参数如何,此要求都成立.如果提供了NULL参数,则列出的一些函数不需要是线程安全的,并且time不包括在内.
所以看起来任何POSIX符合要求的系统都应该有一个线程安全的实现time.
但是,POSIX系统是否可以选择time_t在实际上使其成为指针且仍然符合要求的情况下实现?因此,如果提供一个NULL参数来存储结果,那么它的线程安全上的所有下注都不会被关闭,因为它可能会返回指向某个静态存储的指针吗?或者是否有一些time_t我在这方面缺少的要求或约定?
我如何最好地验证time在几个UNIX平台上是否是线程安全的?特别是AIX,HP-UX,Linux,和Solaris.在调试器中单步执行反汇编可能会有效,但实现可能会更改.
是的,它是线程安全的。
time_t time( NULL );
Run Code Online (Sandbox Code Playgroud)
如果它实现了一个内部值,那么在它返回时,它总是必须从内部值复制到返回值(寄存器?)。该副本将使其成为线程安全的,因为它适合所有现代处理器的单个副本。
mov eax, static_internal_value
return
Run Code Online (Sandbox Code Playgroud)
想象一下,情况并非如此,并且有 2 个线程进来。它们都会复制出相同的值 - 再次,看不出这怎么可能是不正确的。
thread 1 thread 2
mov eax, static_internal_value
mov eax, static_internal_value
return
return
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1488 次 |
| 最近记录: |