gpt4 book ai didi

multithreading - InterlockedRead在哪里?

转载 作者:行者123 更新时间:2023-12-03 12:54:08 27 4
gpt4 key购买 nike

Win32 API具有一组InterlockedXXX函数,可以原子地且同步地操作简单变量,但是似乎没有任何InterlockedRead函数可以简单地获取变量的值。怎么会?

MSDN says表示:

Simple reads and writes to properly-aligned 32-bit variables are atomic operations



但添加:

However, access is not guaranteed to be synchronized. If two threads are reading and writing from the same variable, you cannot determine if one thread will perform its read operation before the other performs its write operation.



据我了解,这意味着可以对一个变量进行简单的读取操作,而对另一个变量(例如InterlockedAdd操作)进行适当的操作。那么为什么没有互锁的函数来读取变量呢?

我猜该值可以读取为InterlockedAdd-ing结果为零,但这似乎不是正确的方法。

最佳答案

正常的实现方法是使用两个值相同的比较交换操作(例如InterlockedCompareExchange64)。我有一个偷偷的怀疑,由于某种原因,它可以比加0更加有效,但是我没有证据支持这一点。

有趣的是,.NET的 Interlocked 类直到.NET 2.0才获得 Read 方法。我相信Interlocked.Read是使用Interlocked.CompareExchange实现的。 (请注意,Interlocked.Read文档使我有些误解-它谈论的是原子性,而不是易变性,这意味着.NET上的内容非常具体。我不确定Win32内存模型可以保证从a生成的新值的可见性。不同的线程,如果有的话。)

关于multithreading - InterlockedRead在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1084594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com