EFr*_*ank 19 winapi multithreading
我遇到了InterlockedExchange函数,并想知道何时应该使用这个函数.在我看来,在x86处理器上设置32位值应该始终是原子的?
在我想使用该函数的情况下,新值不依赖于旧值(它不是增量操作).你能提供一个强制要求这个方法的例子(我不是在寻找InterlockedCompareExchange)
Jas*_*hen 10
InterlockedExchange是写入和读取 - 它返回先前的值.
这是确保另一个线程在您执行之后不会写入不同值的必要条件.例如,假设您正在尝试增加变量.您可以读取值,添加1,然后使用设置新值InterlockedExchange.返回的值InterlockedExchange必须与您最初读取的值匹配,否则另一个线程可能会同时增加它,您需要循环并再次尝试.
在多处理器或多核机器中,每个核心都有自己的缓存 - 因此每个核心对于系统内存的内容都有可能不同的“视图”。
线程同步机制负责核心之间的同步,有关更多信息,请参阅http://blogs.msdn.com/oldnewthing/archive/2008/10/03/8969397.aspx或 google 了解获取和释放语义
| 归档时间: |
|
| 查看次数: |
10263 次 |
| 最近记录: |