Рекурсивный мьютекс с реализацией 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() функции, используемые для манипулирования типом мьютекса.

Другие вопросы по тегам