【发布时间】:2013-05-31 07:25:44
【问题描述】:
考虑以下 POSIX 对重入的扩展定义:
在 POSIX.1c 中,“可重入函数”被定义为“其 效果,当被两个或多个线程调用时,保证就像 每个线程一个接一个地执行函数 未定义的顺序,即使实际执行是交错的”(ISO/IEC 9945:1-1996, §2.2.2)。
来源:http://www.unix.org/whitepapers/reentrant.html
由于线程安全函数确实序列化并发执行,因此“每个线程都以未定义的顺序一个接一个地执行函数,即使实际执行也是交错的”,这是否意味着线程安全函数是可重入(仅考虑 POSIX 定义)?
【问题讨论】:
-
我认为它的关键字“交错”会有所不同;线程安全部分是顺序的,或者必须是而不是真正交错的。只是猜测......
-
我会说 POSIX 方面,可重入意味着线程安全,但不一定反过来。但是,我知道的唯一示例来自 Windows 实现的不可重入 C 函数,例如
strtok():它们的实现是线程安全的,因为它使用线程本地存储,但它不是可重入的。我不知道这些函数(或其某些实现)的 POSIX 版本是否是线程安全的。 -
@AnsgarWiechers 这个问题是关于 POSIX.1c 定义的吗?不...
标签: c multithreading concurrency thread-safety posix