首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt线程同步

Qt线程同步
EN

Stack Overflow用户
提问于 2013-04-06 03:56:52
回答 3查看 574关注 0票数 2

考虑以下情况:

我有一个不断修改变量(让我们称之为counter)的QThread和一个定期读取counter的QTimer。我知道我必须同步可能被多个线程同时修改的变量,但是-在这种情况下,当只有一个线程读取和一个线程写入变量时,我也需要同步吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-06 04:20:41

是的,你总是需要同步-如果没有其他原因,标准说如果有数据竞争,你的程序有未定义的行为。

您可以使用保护计数器变量的互斥锁进行同步,我认为这是“传统”的方式,也可以使用计数器的std::atomic<int>变量,您可以在不创建数据竞争的情况下访问该变量。

票数 2
EN

Stack Overflow用户

发布于 2013-04-06 04:19:37

你描述的场景并不安全,你仍然需要同步。Qt中有几个类可以帮助你做到这一点,通过锁定或自由锁定机制。

看看QMutex,QReadWriteLock,QSemaphore,QWaitCondition,QFuture,QFutureWatcher,QAtomicInt和QAtomicPointer。另外,在C++11中有std::atomic<T>

票数 4
EN

Stack Overflow用户

发布于 2013-04-06 04:26:16

使用QReadWriteLock保护您的counter变量。当您在线程中编辑counter变量时,让它们使用QWriteLocker锁定该变量,这将锁定任何其他写入或读取尝试。当您的主线程检查counter的值时,使用QReadLocker锁定它,只有在写锁当前处于活动状态时才会锁定它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15842446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档