当前位置:  开发笔记 > 人工智能 > 正文

应该何时使用Win32 InterlockedExchange功能?

如何解决《应该何时使用Win32InterlockedExchange功能?》经验,为你挑选了2个好方法。

我遇到了InterlockedExchange函数,并想知道何时应该使用这个函数.在我看来,在x86处理器上设置32位值应该始终是原子的?
在我想使用该函数的情况下,新值不依赖于旧值(它不是增量操作).你能提供一个强制要求这个方法的例子(我不是在寻找InterlockedCompareExchange)



1> moonshadow..:

除了写入新值外,InterlockedExchange还读取并返回先前的值; 整个操作都是原子的.这对于无锁算法很有用.

(顺便说一句,32位写入不保证是原子的.例如,考虑写入未对齐并跨越缓存边界的情况.)



2> Jason Cohen..:

InterlockedExchange是写入读取 - 它返回先前的值.

这是确保另一个线程在您执行之后不会写入不同值的必要条件.例如,假设您正在尝试增加变量.您可以读取值,添加1,然后使用设置新值InterlockedExchange.返回的值InterlockedExchange必须与您最初读取的值匹配,否则另一个线程可能会同时增加它,您需要循环并再次尝试.


在这种情况下,我会使用InterlockedCompareExchange,因为检查该值是否仍然是原始值已由该方法完成.
或者只是InterlockedIncrement
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有