![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++11
五山小新新
希望每天6点下班,然后逛超市,买水果,买牛奶,看美女。
展开
-
无锁内存队列
#include <chrono>#include <iostream>#include <thread>#include <vector>#include "lockfree_queue.h"using namespace wwsearch;using namespace std;class LockFreeQueueTest {...原创 2019-12-23 01:01:05 · 520 阅读 · 0 评论 -
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 · 1102 阅读 · 0 评论 -
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 · 1487 阅读 · 0 评论 -
C++ 11 的std::atomic操作
0. 简单应用所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借...原创 2019-05-31 21:11:31 · 8188 阅读 · 1 评论 -
C++ 11 私有成员变量就地初始化
在C++11之前,对于类中的非静态成员变量,不能在类中进行初始化,它们的初始化操作只能通过构造函数来进行,示例如下:class Foo{ private: int a = 1; //编译错误 public: Foo() {}};上面的程序中,变量a进行了就地初始化,这在C++98中是不允许的,因此会导致编译错误。但是这种情况在C++...转载 2019-06-06 17:36:28 · 5939 阅读 · 2 评论 -
C++11的move语义
1. 基本原理std::move函数可以以非常简单的方式将左值引用转换为右值引用。通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。2. 例子如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char ...原创 2019-05-29 23:10:01 · 551 阅读 · 0 评论