- 博客(4)
- 资源 (6)
- 收藏
- 关注
原创 C++ 11 的std::atomic操作
0. 简单应用所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借...
2019-05-31 21:11:31 8245 1
原创 C++11中std::lock_guard和std::unique_lock的使用
1. 原理在互斥类最重要的成员函数是lock()和unlock。通常在进入临界区时,需要进行加锁操作,在退出临界区时,进行解锁操作。更好的办法是采用**”资源分配时初始化”(RAII)方法来加锁、解锁**,这避免了在临界区中因为抛出异常或return等操作导致没有解锁就退出的问题。std::lock_guard类模板做mutex的RAII, 避免因为return或者异常导致的解锁失败而导致资源...
2019-05-31 20:32:20 1515
原创 C++11的move语义
1. 基本原理std::move函数可以以非常简单的方式将左值引用转换为右值引用。通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。2. 例子如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char ...
2019-05-29 23:10:01 559
原创 C++ 11 promise future
1. 简单用例future和promise的作用是在不同线程之间传递数据。简单的例子:假设线程1需要线程2的数据,那么组合使用方式如下:线程1初始化一个promise对象和一个future对象, promise传递给线程2, 相当于线程2对线程1的一个承诺,future相当于一个接受一个承诺,用来获取未来线程2传递的值。如果值未返回,则一直会阻塞。#include <iostr...
2019-05-28 00:33:50 1135
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人