我正在尝试获取在Mac OS X中调用mutex对象上的锁的线程ID。但是Mac OS X中的互斥锁对象似乎没有互斥锁对象的所有者线程ID。
Linux中 pthread_mutex_t 的定义:
typedef union
{
struct __pthread_mutex_s
{
int __lock;
unsigned int __count;
int __owner;
...
} pthread_mutex_t;
在Mac OS X / FreeBSD中定义 pthread_mutex_t :
struct _opaque_pthread_mutex_t
{
long __sig;
char __opaque[__PTHREAD_MUTEX_SIZE__];
};
你可以看到似乎没有信息,我可以利用它来获取互斥锁的拥有线程ID,或者我错过了什么......?
在Mac OS X中,我如何获得Mutex的所有者..?我一直在通过Mac OS X中的pthread头文件,并没有做任何有用的东西。请详细说明一下。
我知道有一个类似的问题:How can I debug mutex issues on Mac OS X?
但它既没有回答,也不想使用lldb。我想在我的代码本身中使用互斥锁的所有者来避免递归锁定。
答案 0 :(得分:0)
PThread-API不允许检索持有特定互斥锁的线程。
出于调试目的,在代码中添加大量日志记录,告诉您哪个线程名为pthread_mutex_lock()
/ pthread_mutex_unlock()
哪个互斥锁。