我想从在其他线程的单独线程中运行的递归函数返回。
我尝试使用Recursive互斥锁,但它不起作用!!
我们如何实现它?
bool stop = false;
QMutex mutex(QMutex::Recursive);
int count = 1;
void worker_run () {
QMutexLocker locker(&mutex);
if(stop)
return;
qDebug () << count++;
worker_run();
}
void worker_stop () {
QMutexLocker locker(&mutex);
stop = true;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QtConcurrent::run(&worker_run);
QtConcurrent::run(&worker_stop);
return a.exec();
}
答案 0 :(得分:2)
我认为问题在于对worker_run()的递归调用不会解锁互斥锁。 请记住,QMutexLocker会在超出范围时解锁。然后给它一个范围......
void worker_run () {
{ QMutexLocker locker(&mutex);
if(stop)
return;
}
qDebug () << count++;
worker_run();
}
答案 1 :(得分:0)
删除所有互斥锁,然后重试。原因是因为worker_run不是关键区域,除了对stop变量的访问权限,该变量被授予原子。
我相信你也错过了对stop变量的volatile限定符(或者至少使用了一些显式的原子数据类型)。