2013-07-23 3 views
1

Я просматривал код, который предоставляет C/C++-оболочку для мьютекса pthread. Код сохраняет теневую переменную для сигнализации/отсутствия сигнала. Код также игнорирует возвращаемые значения из таких функций, как pthread_mutex_lock и pthread_mutex_trylock, поэтому теневая переменная может не точно отражать состояние мьютекса (игнорируя условие незначительной гонки).pthread mutex: get state

Предоставляет ли pthread возможность запросить мьютекс для его состояния? Быстрое считывание pthread API, похоже, не предлагает. Я также не вижу ничего интересного, которое работает на pthread_mutexattr_t.

Или следует использовать trylock, полагаться на EBUSY и отказаться от собственности, если приобретено?

Заранее спасибо.

ответ

1

Нет такой функции, потому что не было бы смысла. Если вы запросили состояние мьютекса, не пытаясь его получить, как это делает pthread_mutex_trylock(), то полученный результат может быть немедленно аннулирован другим потоком, изменяющим это состояние мьютекса.

+0

ОК, это звучит как плохой дизайн из этой библиотеки. – jww

Смежные вопросы