C++ boost::mutex::锁异常,错误号为22
我正在使用boost::mutex类同步一个资源上的两个线程。 调用以下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: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默认线程优先级吗