atomic.load
时间: 2023-11-06 17:21:21 浏览: 154
C++ 11 开发中的 Atomic 原子操作.rar_C++11、原子_atomic c++_c++ atomic使用_c++
5星 · 资源好评率100%
std::atomic_load是C++标准库中的一个函数,用于从一个std::atomic对象中加载(读取)值。它的作用是读取std::atomic对象的值,该对象可以保证在多线程环境下的原子性操作。
std::atomic_load_explicit是std::atomic_load的一个变体,它允许用户指定一个memory_order参数,以控制内存访问的顺序和一致性。
在C++的atomic库中,除了提供基本的atomic类型外,还提供了两个模板算法atomic_load和atomic_store,它们可以用来对任何类型进行atomic操作。atomic_load用于加载(读取)值,而atomic_store用于存储(写入)值。
在C++11标准中,还提供了std::atomic_compare_exchange_strong函数,它实现了CAS(Compare-And-Swap)算法。CAS是一种并发算法,用于在多线程环境下实现原子操作。CAS操作包括三个操作数:一个内存位置、一个期望值和一个新值。它的作用是比较内存位置的当前值与期望值是否相等,如果相等,则将新值写入该内存位置,否则不做任何操作。
在上面的示例代码中,使用std::atomic_compare_exchange_strong函数实现了一个increment函数,用于对std::atomic<int>类型的data对象进行原子加一操作。首先,函数使用data.load()读取data的当前值,然后使用compare_exchange_strong函数进行CAS操作,如果比较和交换成功,则将expected加一,否则重新加载data的值,直到操作成功为止。这样可以确保在多线程环境下对data对象进行原子加一操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [[moder c++] atomic_load 和 atomic_store](https://blog.csdn.net/ykun089/article/details/125820270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [std:: atomic::load | 无锁结构](https://blog.csdn.net/m0_48739934/article/details/129183795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文