一个线程有一个类型为pthread_mutex_t
的互斥锁,已经被锁定。另一个线程想要知道持有该锁的线程的线程ID。
据我所知,有两种类型的线程ID。一种是由pthread_self()
返回的POSIX/pthread线程ID,另一种是由系统调用gettid()
返回的Linux线程ID。这两种线程ID是独立的,没有关系(如有错误请纠正)。
pthread_mutex_t
结构体中有一个字段int __owner
,它存储着当前持有锁的线程的线程ID。可以通过以下方式访问该字段,
pthread_mutex_t mutex;
int tid;
tid = mutex.__data.__owner;
如此描述 - 是否可以确定持有互斥锁的线程?。
这个__owner
字段具有Linux系统线程ID(如gettid()
返回的那样),而不是POSIX / pthread线程ID(如pthread_self()
返回的那样)。
我想比较当前调度的线程是否拥有互斥锁。因此,我应该将pthread_self()
与__owner
值进行比较。
我可以使用gettid()
而不是pthread_self()
,但我只能使用pthread_self()
(一些可移植性特征)。
有没有办法正确确定锁定的互斥锁的线程ID,它会返回pthread_t
而不是系统线程ID?
我将感激任何帮助,谢谢!
问候,
Yusuf Husainy。
__owner
值到pthread_self()
的映射表,每个pthread在启动时都可以将自己添加到其中。(该映射表需要由互斥锁保护,在pthread“注册”自己时可以从中提取__owner
值。) - user3793679