【发布时间】:2014-07-16 00:44:32
【问题描述】:
我正在尝试获取在 Mac OS X 中调用互斥对象锁定的线程 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;
pthread_mutex_t 在 Mac OS X/FreeBSD 中的定义:
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。我希望在我的代码中使用互斥锁的所有者来避免递归锁。
【问题讨论】:
-
您可以使用
pthread_mutexattr_settype PTHREAD_MUTEX_RECURSIVE允许递归锁定。没有这个,它是非递归的。也检查一下,PTHREAD_MUTEX_ERRORCHECK。
标签: c multithreading macos pthreads mutex