尝试使用unique_lock时出现unlock of unowned mutex,abort has been call等问题,在网上搜索了很久在其他文章中都没有找到解决办法,自己检查了几遍程序逻辑也没发现什么错误。
排查了很久之后发现unique_lock变量被定义为全局变量,所有线程都能访问到lock变量,在各个线程中对同一个变量进行赋值操作会导致一些不可预测的问题,代码不规范。
出错程序的结构基本上是:
unique_lock<mutex> lock;
mutex mtx;
...
void fun1()
{
lock=unique_lock<mutex>(mtx);
...
}
void fun2()
{
lock=unique_lock<mutex>(mtx);
...
}
int main()
{
thread t1(fun1);
thread t2(fun2);
thread t3(fun1);
...
t1.join();
...
}
将lock改为局部变量问题就解决了…
走了很大一段弯路.