1

我在struct thread_info计算某个事件时添加了一个变量。这是在来宾操作系统中完成的。
在虚拟机的执行过程中,我不时地从我的主机中读取这些变量。
我观察到有时我得到了预期的值,但有时我读取了垃圾值。我认为 GCC 正在优化我的变量,而我正在读取的内存处于垃圾状态。
我想知道可能的预防方法。
关闭内核的 GCC 优化是毫无疑问的,因为我的目标是根据我计算的事件加速虚拟机。
#pragma optimize("",off)
使其效率降低,因为那样我将不得不将我的事件计数代码(只有 2 行)分解为一个函数。我计算的这个事件经常发生。
有没有我可以使用的#pragma 技术?
使我的变量 volatile 有助于解决问题吗?

谢谢

4

1 回答 1

3

制作变量volatile将阻止 GCC 优化它们。您不需要完全禁用优化。

但是,您可能需要处理在内核可能仍在更新结构时尝试从结构中读取而导致的竞争条件。不过,我不知道您将如何在 VM 上下文中执行此操作。也许您正在使用的虚拟机管理程序提供了一些特殊的来宾-主机通信机制。例如,VMware 有VMCI

于 2013-01-20T08:09:48.007 回答