`
aigo
  • 浏览: 2634953 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[C++11]std::atomic:store和load的示例(example)

阅读更多

原文:

std::memory_order

http://en.cppreference.com/w/cpp/atomic/memory_order

 

#include <thread>
#include <atomic>
#include <cassert>
#include <string>
 
std::atomic<std::string*> ptr;
int data;
 
void producer()
{
    std::string* p  = new std::string("Hello");
    data = 42;
    ptr.store(p, std::memory_order_release);
}
 
void consumer()
{
    std::string* p2;
    while (!(p2 = ptr.load(std::memory_order_acquire)))
        ;
    assert(*p2 == "Hello"); // never fires
    assert(data == 42); // never fires
}
 
int main()
{
    std::thread t1(producer);
    std::thread t2(consumer);
    t1.join(); t2.join();
}

 

 

分享到:
评论

相关推荐

    C++ 11 开发中的 Atomic 原子操作.rar_C++11、原子_atomic c++_c++ atomic使用_c++

    `std::atomic`提供了一系列的成员函数来执行原子操作,包括`load()`(读取)、`store()`(存储)、`exchange()`(交换)、`compare_exchange_weak()`和`compare_exchange_strong()`(比较并交换)等。这些函数确保...

    安全栈表实现,C++11实现,使用atomic特性

    C++11引入了原子操作(Atomic Operations)库,提供了对数据访问的原子性,从而在并发编程中保证了数据的安全性。本篇将深入探讨如何使用C++11的原子特性来实现一个安全的栈。 首先,`atomic`类模板是C++11标准库中...

    基于C++11实现的定时器

    1. **std::chrono库**:C++11引入了std::chrono库,用于处理时间和时间间隔。这个库提供了各种时间点和时间间隔类型,例如std::chrono::system_clock、std::chrono::high_resolution_clock和std::chrono::duration。...

    每天学点C++(C++实例教程:教程+源码)thread.zip

    C++提供了多种同步原语,如`std::mutex`用于互斥锁,`std::condition_variable`用于条件变量,以及`std::atomic`类型用于原子操作。这些工具可以帮助确保在多线程环境中数据的一致性和完整性。例如,使用`std::mutex...

    C++并发编程实战:示例源源码

    3. **原子操作与内存模型**:C++11引入了`std::atomic`库,提供了一组原子类型和操作,确保在多线程环境中这些操作不会被中断。内存模型定义了如何处理不同线程间的内存访问顺序,确保正确的行为。 4. ** futures ...

    深入理解C++11:C++11新特性解析与应用源代码

    《深入理解C++11:C++11新特性解析与应用源代码》是一本专为C++开发者设计的书籍,旨在帮助读者掌握C++11标准中的新特性和最佳实践。C++11是C++语言的一个重大更新,引入了许多重要的改进,包括语法上的优化、性能...

    C++11并发编程实战源代码

    《C++11并发编程实战源代码》是一个深入学习C++11多线程和并发编程的实践项目,其中包含了丰富的源代码示例。在C++11标准中,对多线程的支持是一项重要的更新,它使得C++程序员能够更好地利用多核处理器的优势,提高...

    C++高效编程:内存与性能优化

    10. **并行和并发编程**:C++11引入了多线程支持,如`std::thread`和`std::async`,以及原子操作(`std::atomic`),允许开发者利用多核处理器进行并行计算,提高性能。 11. **编译器优化选项**:使用编译器的优化...

    每天学点C++(C++实例教程:教程+源码)多线程.zip

    C++11引入了线程安全的容器,如`std::atomic`,它们在多线程环境下提供原子操作,保证数据的一致性。 通过学习这个实例教程,你将能掌握C++中的基本多线程编程技术,并了解如何在实际项目中有效地利用多线程提升...

    C++11StdLib Table of Code Examples

    在`iter`中,可以看到C++11对迭代器的扩展,如随机访问迭代器的`std::next`和`std::prev`函数,以及`std::begin`和`std::end`,它们可以用于任何类型的容器,包括数组。 6. **语言增强(Lang)** 文件`lang`可能...

    Effective.Modern.C++-42.Specific.Ways.to.Improve.Your.Use.of.C++11.and.C++14

    8. **现代C++编程中的最佳实践修订**:C++11和C++14引入的新特性要求程序员在编写现代C++代码时对一些传统的最佳实践进行重新评估。本书探讨了在新时代下,如何根据现代C++的新特性来调整和优化编程方法。 作者...

    C++11 Multithread

    C++11标准库新增了`&lt;thread&gt;`头文件,它提供了`std::thread`类来管理线程。此外,还提供了与线程同步相关的类如`std::mutex`、`std::lock_guard`、`std::unique_lock`、`std::condition_variable`等。这些组件一起...

    C++17 - The Complete Guide.pdf

    * std::atomic:C++17引入了std::atomic类,允许开发者实现原子操作。 错误处理 C++17引入了许多新的错误处理机制,包括: * std::error_code:C++17引入了std::error_code类,允许开发者表示错误代码。 * std::...

    C++ string类的隐式共享写时拷贝实现代码

    在C++编程中,`std::string`是一个非常重要的类,用于处理字符串。然而,有时候我们需要自定义一个string类来满足特定的需求,比如在本例中,你采用了一种特殊的内存管理策略——隐式共享写时拷贝(又称“智能指针”...

    线程安全的std :: map和无锁映射的速度

    3. **线程安全指针**:C++11引入了智能指针如std::shared_ptr和std::unique_ptr,它们在一定程度上保证了对象生命周期的管理是线程安全的。特别是std::shared_ptr,其内部使用了引用计数,这个计数的增加和减少是...

    深入C++11代码优化与工程级应用

    在库方面,C++11增加了许多实用的新容器和算法,如`std::unordered_map`和`std::unordered_set`提供了哈希表实现,提高了查找效率;`std::shared_ptr`和`std::unique_ptr`等智能指针管理了对象生命周期,减少了内存...

    C++11标准库比较全面.rar

    C++11是C++语言的一个重要版本,它引入了大量的新特性、优化和改进,极大地提升了C++的现代性和实用性。下面我们将深入探讨C++11标准库中的关键知识点。 1. **智能指针**: - `std::unique_ptr`:作为独占所有权的...

    C++并发编程实战 示例源源码

    4. **异步编程(Asynchronous Programming)**:C++11引入了`std::async`和`std::future`,支持异步操作。`std::async`可以启动一个后台任务,而`std::future`用于获取异步任务的结果。这种方式可以实现非阻塞的并发...

    使用C++11线程的矩阵乘法_C++_下载.zip

    此外,C++11还提供了`std::future`和`std::promise`来处理异步计算的结果。它们可以用于在线程间通信,获取子线程计算的结果。 对于更复杂的线程池和任务调度,C++17引入了`std::jthread`和`std::stop_token`,以及...

Global site tag (gtag.js) - Google Analytics