c++11的记录】的更多相关文章

转自:http://blog.csdn.net/crayondeng/article/details/18563121 一.Lambda表达式 C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下:               [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体}       可以看到,Lambda主要分为五个部分:[函数对象参数].(操作符重载函数参数).mutable…
最近用上了windows下的clion,发现默认安装的MINGW版本太低,导致所带的gcc版本竟然是3.5的,实在太老了,不支持c++11,于是手动修改了mingw的版本.首先去mingw的官网下载最新的-mingw-get-setup.exe可执行文件,下载过了来的时候其实文件名是-mingw-get-setup.exe-r,去掉最后面的-r即可开始执行.开始执行之后,基本上默认安装即可,可是麻烦的是在安装的最后还需要下载大量的相关文件,那个选择安装包的软件叫MinGW Installer m…
decltype()类型指示符 设定一个返回值是int的函数f(),通过使用 decltype(f()) sum = x; 此时decltype()接受一个从f()返回的int型的值,并将sum设置为int型. auto自动类型 用auto遍历二维数组 #include <bits/stdc++.h> using namespace std; int main () { constexpr size_t ss = 5; int ia[ss][ss]; for (size_t i = 0; i…
两种并发编程模型 多进程 进程间通信常用的几种方式: 文件 管道 消息队列 多线程 一个进程中存在的多个线程,通常通过共享内存来通信,(说的非常非常粗俗,就是通过类似"全局变量"的一些数据对象来通信.不知道这种说对不对) 两者优缺点 多线程优点 线程被称为"轻量级进程",一般启动更快,而开启一个进程会慢一些也会复杂一点(因为操作系统需要绑定一些内部资源来管理进程) 线程的运行成本更低.比如说进程运行时,操作系统需要提供很多保护,防止意外地从当前进程切换到其他某个进程…
https://www.youtube.com/watch?v=13dFggo4t_I视频地址 实例1 考虑这样一个场景:存在一个全局队列deque,线程A向deque中推入数据(写),线程B从deque中取出数据(读). deque这个资源对象就需要用mutex做访问控制,代码如下: std::deque<int> q; std::mutex mu; void func1() { int ct = 10; while (ct > 0) { std::unique_lock<std…
https://www.youtube.com/user/BoQianTheProgrammer 视频网址 Unique Lock unique_lock和lock_guard类似,都是mutex的wrapper类,但是前者更加灵活 lock_guard没有unlock方法,unique_lock可以调用unlock unique_lock可以延时调用lock方法,lock_guard不行 unique_lock不可复制.可移动,lock_guard不可复制.不可移动 // 1 ... std:…
简单示例 举个例子,桌上有一支笔和一张纸,小A和小B都要拿到纸笔写字 小A拿了笔,小B拿了纸,这时就形成了死锁(两人都不愿意让出纸笔). 其实只要稍加控制就可以避免这种情况:规定必须先拿到纸再能去尝试拿笔: ...... 上面这个例子里相当于存在两个mutex,一个对纸进行"访问控制"(记作mutex1),一个对笔进行"访问控制"(记作mutex2): 小A的加锁顺序是mutex2, mutex1: 小B是mutex1, mutex2 很多情况都是不同线程对多个mu…
https://www.youtube.com/watch?v=3ZxZPeXPaM4 学习视频 数据争用 简单来说就是存在多个线程同时对某个共同的对象进行读写(至少有一个线程在做写操作),造成读取这个对象时的结果不可预测 如下 int num = 0; void func(int &v) { for (int i = 0; i < 100000; ++i) { num = num + 1; v++; } } int main() { int v = 0; std::vector<st…
线程没有调用join和detach thread对象必须调用join或者detach,否则程序会终止 例如: void func() { std::cout << "hello, " << std::this_thread::get_id() << std::endl; } int main() { std::thread t(func); return 0; } 也可能在join/detach之前抛出异常导致没有正常调用join/detach vo…
启动一个线程 话不多说,直接上代码 void func(); int main() { std::thread t(func); //这里就开始启动线程了 t.join(); // 必须调用join或者detach return 0; } void func() { std::cout << "Hello, " << std::this_thread::get_id() << std::endl; } 等待子线程结束 有时候开启一个子线程之后,父线程…