InterlockedIncrement参数

时间:2018-11-27 11:34:06

标签: c++ windows winapi atomic

我注意到LONG InterlockedIncrement(LONG* p)不仅返回增量,而且还递增p自身地址上的值。这意味着,作为调用者,您既可以使用返回值,也可以使用p所指向的值。

这很好,实际上,我可以很好地使用它,但是documentation中没有提及。

可以使用修改后的值吗?这种行为是否会在Windows API的将来版本中更改

2 个答案:

答案 0 :(得分:5)

  

这意味着,作为调用者,您既可以使用返回值,也可以使用p所指向的值。

不,你不能。在调用InterlockedIncrement之后,返回值包含递增的值。另一方面,如果您读取变量*p,则另一个线程可能同时修改了该值。

答案 1 :(得分:2)

内存位置中的实际值会增加,但是以后尝试读取它不是原子的,在函数返回后但从内存地址读取之前,可能已修改了该值。

返回值是任何新近系统上的递增值,但并非总是这样。 Windows 95&NT 3.x将在386处理器上运行,并且这些处理器没有C:/Repo/Workflows/ProjectXyz/Foo/ThisFile.xaml指令。在那些系统上,函数执行LOCK XADDonly returned the sign of the result

这也许是用LOCK INC最著名的发现,这是其返回值被记录为“仅出于调试目的”的部分原因。