2

From the MSDN page:

"The information returned by the GlobalMemoryStatusEx function is volatile. There is no guarantee that two sequential calls to this function will return the same information."

This makes sense, however I cannot determine if this is thread safe or not. Does anybody know one way or another for sure? I have tried Googling this but cannot find this information.

4

1 回答 1

6

MSDN 页面声明的是函数返回的信息会随时间变化:这就是“易失性”的意思。比如返回的信息GetSystemTime也是“易变的”。

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

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

于 2013-09-09T19:43:46.483 回答