исключение boost :: mutex :: lock с ошибкой 22

я работаю с классом boost :: mutex для синхронизации 2 потоков на одном ресурсе.
я получаю исключение, когда я вызываю следующее boost:mutex:lock() функция:

lock()
{
int const res=pthread_mutex_lock(&m);
if(res)
{
boost::throw_exception(lock_error(res));
}
}

res = 22, что является EINVAL.
когда я смотрю на справочную страницу pthread_mutex_lock Я вижу, что функция не будет EINVAL в следующих случаях:

EINVAL:
Значение, указанное в mutex, не относится к инициализированному объекту mutex.

эта опция не актуальна, так как boost: mutex конструктор инициализирует pthread_mutex_t.

EINVAL:
Мьютекс был создан с атрибутом протокола, имеющим значение PTHREAD_PRIO_PROTECT, и приоритет вызывающего потока выше, чем текущий потолок приоритета мьютекса.

этот вариант гораздо разумнее.
когда вы смотрите на инициализацию pthread_mutex_t в custructor boost :: mutex, вы видите:

mutex()
{
int const res=pthread_mutex_init(&m,NULL);
if(res)
{
boost::throw_exception(thread_resource_error());
}
}

это означает, что Boost использовать по умолчанию pthread_mutexattr_t для мьютекса.
мой вопрос:

  1. делает значение по умолчанию pthread_mutexattr_t включает атрибут протокола со значением PTHREAD_PRIO_PROTECT?

  2. если вы, моя проблема становится хуже, так как я зависим от приоритета потока, который пытается заблокировать мьютекс. моя тема создана ACE_Task_Base::activate, Можете ли вы сказать мне, что является приоритетом темы по умолчанию туза?

я работаю на Linux Redhat …

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]