我注意到LONG InterlockedIncrement(LONG* p)
不仅返回增量,而且还递增p
自身地址上的值。这意味着,作为调用者,您既可以使用返回值,也可以使用p
所指向的值。
这很好,实际上,我可以很好地使用它,但是documentation中没有提及。
可以使用修改后的值吗?这种行为是否会在Windows API的将来版本中更改
答案 0 :(得分:5)
这意味着,作为调用者,您既可以使用返回值,也可以使用
p
所指向的值。
不,你不能。在调用InterlockedIncrement
之后,返回值包含递增的值。另一方面,如果您读取变量*p
,则另一个线程可能同时修改了该值。
答案 1 :(得分:2)
内存位置中的实际值会增加,但是以后尝试读取它不是原子的,在函数返回后但从内存地址读取之前,可能已修改了该值。
返回值是任何新近系统上的递增值,但并非总是这样。 Windows 95&NT 3.x将在386处理器上运行,并且这些处理器没有C:/Repo/Workflows/ProjectXyz/Foo/ThisFile.xaml
指令。在那些系统上,函数执行LOCK XADD
和only returned the sign of the result。
这也许是用LOCK INC
最著名的发现,这是其返回值被记录为“仅出于调试目的”的部分原因。