C++ boost::mutex::锁异常,错误号为22

C++ boost::mutex::锁异常,错误号为22,c++,linux,multithreading,ace,boost-mutex,C++,Linux,Multithreading,Ace,Boost Mutex,我正在使用boost::mutex类同步一个资源上的两个线程。 调用以下boost:mutex:lock()函数时出现异常: lock() { int const res=pthread_mutex_lock(&m); if(res) { boost::throw_exception(lock_error(res)); } } res=22,这是EINVAL。 当我查看pthread\u mutex\u lock的手册页时,我可以看到该函数在以下情况

我正在使用boost::mutex类同步一个资源上的两个线程。 调用以下
boost:mutex:lock()
函数时出现异常:

lock()
{
   int const res=pthread_mutex_lock(&m);
   if(res)
   {
      boost::throw_exception(lock_error(res));
   }
}
res=22,这是EINVAL。 当我查看
pthread\u mutex\u lock
的手册页时,我可以看到该函数在以下情况下不会启用:

艾因瓦尔: 互斥体指定的值不引用已初始化的互斥体对象

此选项不相关,因为boost:mutex构造函数初始化pthread\u mutex\t

艾因瓦尔: 创建互斥体时,协议属性的值为PTHREAD_PRIO_PROTECT,并且调用线程的优先级高于互斥体的当前优先级上限

这一选择更加合理。 在boost::mutex custructor中查看pthread_mutex_t的初始化时,您会看到:

mutex()
 {
   int const res=pthread_mutex_init(&m,NULL);
   if(res)
   {
       boost::throw_exception(thread_resource_error());
   }
 }
这意味着boost对互斥对象使用默认的
pthread\u mutexattr\u t
。 我的问题是:

  • pthread\u mutexattr\u t
    的默认值是否包括具有值pthread\u PRIO\u PROTECT的协议属性

  • 如果是,我的问题会变得更糟,因为我依赖于试图锁定互斥锁的线程优先级。我的线程是由
    ACE\u Task\u Base::activate
    创建的。你能告诉我什么是ace默认线程优先级吗

  • 我正在运行linux redhat