c – Qt5 QWaitCondition示例
发布时间:2020-12-16 03:41:47 所属栏目:百科 来源:网络整理
导读:我对自己熟悉QT5并发库.我在看QWaitCondition示例( http://qt-project.org/doc/qt-5.0/qtcore/qwaitcondition.html#details). 这里,一个线程(线程B)读取用户输入,所有其他线程(线程A)处理此输入. 线程A: forever { mutex.lock(); keyPressed.wait(mutex); +
我对自己熟悉QT5并发库.我在看QWaitCondition示例(
http://qt-project.org/doc/qt-5.0/qtcore/qwaitcondition.html#details).
这里,一个线程(线程B)读取用户输入,所有其他线程(线程A)处理此输入. 线程A: forever { mutex.lock(); keyPressed.wait(&mutex); ++count; mutex.unlock(); do_something(); mutex.lock(); --count; mutex.unlock(); } 线程B: forever { getchar(); mutex.lock(); // Sleep until there are no busy worker threads while (count > 0) { mutex.unlock(); sleep(1); mutex.lock(); } keyPressed.wakeAll(); mutex.unlock(); } 使用count变量和扩展互斥同步的原因是为了防止符号丢失. >线程A处理符号,并减少反对(–count); 我是对的,还是我错过了什么?如果我是对的,如何纠正这个例子以真正阻止它跳过符号? 解决方法
你是对的
为了解决这个问题,应该使用已经获得的互斥锁输入循环: mutex.lock(); forever { keyPressed.wait(&mutex); ++count; mutex.unlock(); do_something(); mutex.lock(); --count; } mutex.unlock(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |