在课堂上,我想在这样的函数上使用互斥锁
void Agent::notify(Packet& packet, Peer peer) {
boost::mutex::scoped_lock lock(mutex_);
...
}
编译过程没问题。但是当我执行程序时,boost总是在这一行失败说:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
what(): boost: mutex lock failed in pthread_mutex_lock: Invalid argument
Abandon (core dumped)
我尝试使用lock()
或unlock
方法,但问题相同。当我使用try_lock
时,它不会因条件而失败。
在互联网上搜索我发现了https://svn.boost.org/trac/boost/ticket/9307。
但我认为问题是我的计划,但我不知道在哪里。在我的测试中,这个函数中只有一个线程。
答案 0 :(得分:0)
问题是在程序中,使用互斥锁的线程需要处于相同的级别。然而,创建此错误的线程是主线程。不是创建的。