- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果我看一下 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
的调用会复制并因此访问 thread1
和 thread2
变量。如果这些变量是全局变量并且此时由另一个线程更改,这将导致未定义的行为。
那么 pthread_t
不应该是原子的吗?或者它是否以其他方式确保以原子方式运行?
最佳答案
此 pthread_equal
的实现(将特定于它附带的 POSIX 实现)不访问除本地变量之外的任何变量。在 C 中,参数总是按值传递。 thread1
和 thread2
是函数中的局部变量,它们从调用者进行调用时使用的表达式中获取它们的值。
话虽如此,即使它们不是,这里也不会有线程不安全的问题。相反,如果调用者访问的 pthread_t
对象可能会被其他线程同时更改,而不使用适当的同步机制来排除这种情况,那么这是调用者中的数据竞争错误,而不是被调用者中的线程安全问题.
关于c - 为什么 pthread_equal 是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531146/
如果我看一下 pthread_equal 的实现,它看起来如下: int __pthread_equal (pthread_t thread1, pthread_t thread2) { retu
我正在开发一个程序来读取车辆上的 CAN 数据流。该程序将在带有嵌入式 linux 的 STW TC3g 上使用。 我需要使用基于 powerpc 的交叉编译器来编译我的代码。对于多线程,我写了一个小
我知道在 Linux 中有一个系统调用 pthread_equal 用于比较 2 个线程 ID。但为什么不能使用“==”运算符直接比较 2 个线程 ID? 最佳答案 来自 Linux 上的 pthre
我是一名优秀的程序员,十分优秀!