while循环内易失的类型转换

时间:2019-05-27 17:15:34

标签: c++ c++11

我注意到,除非在Sleep(1)循环中使用类似while的东西,否则它将永远不会中断。

while (*Ns::Gl::G == nullptr) Sleep(1); // Works

while (*Ns::Gl::G == nullptr); // Doesn't work

经过一些研究,我认为这是因为*Ns::Gl::G被另一个线程或进程更改了,在我的情况下,这似乎很可能。

因此,我试图在以下方面做些事情:

while (*(volatile TYPE **)&*Ns::Gl::G == nullptr);以及其他许多变体,但无济于事。

Ns::Gl::G的定义方式包括:

namespace Ns { struct Gl final { static TYPE** G }; TYPE** Gl::G;}

有人知道如何在*Ns::Gl::G循环内将volatile变成while吗? MemoryBarrier()可行,但我非常希望使用volatile关键字。

TL; DR-volatile循环内的while转换无效。

0 个答案:

没有答案