1

我想知道佛罗里达州立大学的 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 实现中使用递归互斥锁,还是有另一种方法来实现这些(即另一种将互斥锁声明为递归的方法)?

4

1 回答 1

1

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

于 2010-11-18T22:47:23.850 回答