我想知道佛罗里达州立大学实施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实现的递归互斥锁,或者有另一种方法来实现这些(即将互斥体声明为递归的另一种方式)?
答案 0 :(得分:1)
不,FSU pthreads实现不支持递归互斥锁。事实上,latest release没有互斥类型的概念。除了缺少PTHREAD_MUTEX_*
互斥锁类型名称外,它还省略了用于操作互斥锁类型的pthread_mutexattr_settype()
和pthread_mutexattr_gettype()
函数。