InterlockedIncrement 参数

InterlockedIncrement parameter

我注意到 LONG InterlockedIncrement(LONG* p) 不仅 return 增加了,而且还增加了 p 本身地址处的值。这意味着,作为调用者,您可以使用 return 值,以及 p.

指向的值

这个很好,其实我也可以很好用,只是documentation里面没有提到。

可以使用修改后的值吗?这种行为是否可以在 Windows API

的未来版本中改变?

Which means, that as caller, you can use both the return-value, as well as the value pointed to by p.

不,你不能。 return 值包含调用 InterlockedIncrement 后增加的值。另一方面,如果您读取变量 *p,那么另一个线程可能同时修改了该值。

内存位置中的实际值会增加,但之后尝试读取它不会是原子的,其他东西可能在函数 returns 之后但在您从内存地址读取之前修改了值。

return 值是任何最新系统上的增量值,但它并不总是这样工作。 Windows 95 & NT 3.x 将在 386 处理器上 运行 而这些处理器没有 LOCK XADD 指令。在那些系统上,函数执行 LOCK INConly returned the sign of the result.

这可能是 IUnknown::Release 最著名的观察结果,也是其 return 值被记录为 "for debugging purposes only".

的部分原因