Рекурсивный мьютекс с реализацией FSU Pthread - PullRequest
1 голос
/ 18 ноября 2010

Мне интересно, способна ли в Университете штата Флорида реализация стандарта 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 Ответ

1 голос
/ 19 ноября 2010

Нет, реализация FSU pthreads не поддерживает рекурсивные мьютексы.Фактически, последний выпуск не имеет представления о типах мьютекса.Помимо отсутствия имен типов мьютексов PTHREAD_MUTEX_*, в нем также отсутствуют функции pthread_mutexattr_settype() и pthread_mutexattr_gettype(), используемые для управления типами мьютексов.

...