gpt4 book ai didi

c - 为什么 pthread_equal 是线程安全的?

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:44 27 4
gpt4 key购买 nike

如果我看一下 pthread_equal 的实现,它看起来如下:

int
__pthread_equal (pthread_t thread1, pthread_t thread2)
{
return thread1 == thread2;
}
weak_alias (__pthread_equal, pthread_equal)

typedef unsigned long int pthread_t;

Posix 文档说 pthread_equal 是线程安全的。但是对 pthread_equals 的调用会复制并因此访问 thread1thread2 变量。如果这些变量是全局变量并且此时由另一个线程更改,这将导致未定义的行为。

那么 pthread_t 不应该是原子的吗?或者它是否以其他方式确保以原子方式运行?

最佳答案

pthread_equal 的实现(将特定于它附带的 POSIX 实现)不访问除本地变量之外的任何变量。在 C 中,参数总是按值传递thread1thread2 是函数中的局部变量,它们从调用者进行调用时使用的表达式中获取它们的值。

话虽如此,即使它们不是,这里也不会有线程不安全的问题。相反,如果调用者访问的 pthread_t 对象可能会被其他线程同时更改,而不使用适当的同步机制来排除这种情况,那么这是调用者中的数据竞争错误,而不是被调用者中的线程安全问题.

关于c - 为什么 pthread_equal 是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com