C++ Qt示例:读取时没有互斥锁,为什么?

C++ Qt示例:读取时没有互斥锁,为什么?,c++,qt,mutex,C++,Qt,Mutex,我在看这个例子,它给我提出了一个疑问:当查看文件时,当访问全局变量m_abort时,当它被更改时,使用了互斥。但是,当run方法从中读取时,它对互斥对象根本不做任何处理。为什么?我根本看不出互斥的目的。 读取和写入m_abort都可以在没有互斥保护的情况下执行,因为它是一个bool变量,并且它的值会自动更改(至少在大多数平台上)。即使写入本身不是原子的,并且变量可能具有不一致的值-它可以是false或true,并且最终将被读取为true(因为在那里写入的唯一值是true)。在大多数情况下都有效,

我在看这个例子,它给我提出了一个疑问:当查看文件时,当访问全局变量m_abort时,当它被更改时,使用了互斥。但是,当run方法从中读取时,它对互斥对象根本不做任何处理。为什么?

我根本看不出互斥的目的。
读取和写入
m_abort
都可以在没有互斥保护的情况下执行,因为它是一个bool变量,并且它的值会自动更改(至少在大多数平台上)。即使写入本身不是原子的,并且变量可能具有不一致的值-它可以是false或true,并且最终将被读取为
true
(因为在那里写入的唯一值是
true
)。

在大多数情况下都有效,但这不是正确的做法。应该锁上


另外,请查看更多信息。

您应该询问为什么
m_abort
不易波动:)这是一个非常有用的评论,谢谢您的建议=D@ValeriAtamaniouk好问题:)有一段时间我一直在想为什么它不是易变的——直到我发现循环中有足够多的外部函数调用来阻止编译器缓存全局
m_abort
变量。