QAtomicPointer如何始终保持原子性

My__God 2016-12-13 11:39:30
看到别人使用QAtomicPointer时,都要加上对Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE宏的判断,如果没有这个宏定义,就不能保证testAndsetOrdered操作的原子性,但是所有用到的地方都只是给出了一个提示,表明非线程安全,那在该宏未定义的环境中如何保证该操作的原子性呢
...全文
786 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zarelaky 2018-12-14
  • 打赏
  • 举报
回复
没学会引用真么使,在来一次。
引用 楼主 My__God 的回复:
看到别人使用QAtomicPointer时,都要加上对Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE宏的判断,如果没有这个宏定义,就不能保证testAndsetOrdered操作的原子性,但是所有用到的地方都只是给出了一个提示,表明非线程安全,那在该宏未定义的环境中如何保证该操作的原子性呢


Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
这个宏只是定义TEST和SET操作是否是平台原生机制支持,并没有强调原子操作是否安全,QT提供QAtomicPointer用来解决指针原子操作问题
并提出是平台无关的,那就可以直接按原子操作概念使用,qt实现保证了原子操作概念的一致。只是与原生支持相比,qt实现可能在性能上要慢一些。

也就是说没有Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE定义,利用QAtomicPointer的testAndsetOrdered函数操作指针也可以当做线程安全方式使用,如过出先并发问题,一个是你使用的有问题,另一个就是qt实现有问题(这个几乎没遇到过:)。
zarelaky 2018-12-14
  • 打赏
  • 举报
回复
Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
这个宏只是定义TEST和SET操作是否是平台原生机制支持,并没有强调原子操作是否安全,QT提供QAtomicPointer用来解决指针原子操作问题
并提出是平台无关的,那就可以直接按原子操作概念使用,qt实现保证了原子操作概念的一致。只是与原生支持相比,qt实现可能在性能上要慢一些。

也就是说没有Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE定义,利用QAtomicPointer的testAndsetOrdered函数操作指针也可以当做线程安全方式使用,如过出先并发问题,一个是你使用的有问题,另一个就是qt实现有问题(这个几乎没遇到过:)。

只为一世逍遥 2018-12-12
  • 打赏
  • 举报
回复
引用 3 楼 赵4老师 的回复:
楼主没理解我这个回答的意思。
我表示看的一脸懵逼。。。你这window核心编程给的范围太广了。。。
赵4老师 2016-12-16
  • 打赏
  • 举报
回复
楼主没理解我这个回答的意思。
My__God 2016-12-16
  • 打赏
  • 举报
回复
楼上没理解我这个问题的意思
赵4老师 2016-12-13
  • 打赏
  • 举报
回复
《Windows核心编程》

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧