Рекурсивный мьютекс с реализацией FSU Pthread
Я задаюсь вопросом, способна ли в любом случае реализация стандарта 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 ответ
Нет, реализация FSU pthreads не поддерживает рекурсивные мьютексы. На самом деле, последний выпуск не имеет представления о типах мьютекса. В дополнение к отсутствию PTHREAD_MUTEX_*
Имена типов мьютекса, он также пропускает pthread_mutexattr_settype()
а также pthread_mutexattr_gettype()
функции, используемые для манипулирования типом мьютекса.