GlobalMemoryStatusEx线程安全吗?

时间:2013-09-09 18:30:08

标签: c++ windows thread-safety

来自MSDN page

“GlobalMemoryStatusEx函数返回的信息是易失的。无法保证对此函数的两次连续调用将返回相同的信息。”

这是有道理的,但我无法确定这是否是线程安全的。有人知道这种或那种方式吗?我试过谷歌搜索但无法找到这些信息。

1 个答案:

答案 0 :(得分:6)

MSDN页面指出的是函数返回的信息随时间变化:这就是“volatile”的含义。例如,GetSystemTime返回的信息也是“易变的”。

关于程序的其他不同概念是“可重入”和“线程安全”。重入意味着过程使用的信息依赖于局部变量,而不是全局变量,这可以被解释为线程安全过程的一种形式。但是,“线程安全”意味着该过程在访问过程所需的资源时实现线程互斥机制。

现在,尽管MSDN没有说明该函数是否是线程安全的,但只要它访问系统资源,我们就可以认为该函数实际上是线程安全的。此外,该函数采用指向本地结构的指针(函数在其中写入信息),因此它是可重入的。如果GlobalMemoryStatusEx返回指向全局结构的指针,那么我们可能会怀疑该函数不是线程安全的。在这种情况下,MS的人可能会注意到这一点。例如,请参阅此链接的备注部分的最终说明:http://msdn.microsoft.com/en-us/library/2c8d19sb(v=vs.90).aspx