具有FSU Pthread实现的递归互斥锁

时间:2010-11-18 10:59:45

标签: recursion pthreads mutex recursive-mutex

我想知道佛罗里达州立大学实施pthread标准是否能够处理递归的互斥体。 不幸的是,有关FSU实现的文档相当差,并没有提到将互斥锁声明为递归的可能性。

尝试按如下方式声明互斥:

pthread_mutex_attr mutex_attr;
pthread_mutexattr_init (&mutex_attr);
pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&mutex, NULL);

并使用FSU pthreads库进行编译,我得到了这个错误列表:

test.c:25: error: `pthread_mutex_attr' undeclared (first use in this function)
test.c:25: error: (Each undeclared identifier is reported only once
test.c:25: error: for each function it appears in.)
test.c:25: error: parse error before "mutex_attr"
test.c:27: error: `mutex_attr' undeclared (first use in this function)
test.c:28: error: `PTHREAD_MUTEX_RECURSIVE' undeclared (first use in this function)

尝试在我的机器上使用(非FSU)pthread实现编译相同的代码,它可以工作。

为了避免琐事,我事先告诉你,默认情况下,POSIX互斥锁不是递归的。

我是否应该断定无法使用FSU实现的递归互斥锁,或者有另一种方法来实现这些(即将互斥体声明为递归的另一种方式)?

1 个答案:

答案 0 :(得分:1)

不,FSU pthreads实现不支持递归互斥锁。事实上,latest release没有互斥类型的概念。除了缺少PTHREAD_MUTEX_*互斥锁类型名称外,它还省略了用于操作互斥锁类型的pthread_mutexattr_settype()pthread_mutexattr_gettype()函数。