如何从FreeBSD / Mac OS X中的Mutex对象获取所拥有的线程ID

时间:2014-05-27 07:44:49

标签: c multithreading macos pthreads mutex

我正在尝试获取在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。我想在我的代码本身中使用互斥锁的所有者来避免递归锁定。

1 个答案:

答案 0 :(得分:0)

PThread-API不允许检索持有特定互斥锁的线程。

出于调试目的,在代码中添加大量日志记录,告诉您哪个线程名为pthread_mutex_lock() / pthread_mutex_unlock()哪个互斥锁。