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:…
两种并发编程模型 多进程 进程间通信常用的几种方式: 文件 管道 消息队列 多线程 一个进程中存在的多个线程,通常通过共享内存来通信,(说的非常非常粗俗,就是通过类似"全局变量"的一些数据对象来通信.不知道这种说对不对) 两者优缺点 多线程优点 线程被称为"轻量级进程",一般启动更快,而开启一个进程会慢一些也会复杂一点(因为操作系统需要绑定一些内部资源来管理进程) 线程的运行成本更低.比如说进程运行时,操作系统需要提供很多保护,防止意外地从当前进程切换到其他某个进程…
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…
简单示例 举个例子,桌上有一支笔和一张纸,小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; } 等待子线程结束 有时候开启一个子线程之后,父线程…
c++11 多线程 – 基本使用 前言:这篇文章仅针对没有使用过c++11线程库的童鞋来高速入门,也是自己的一个简单记录,内容比較基础. 1.线程的基本使用 2.相互排斥量 3.条件变量 4.原子变量 补充 1.线程的基本使用 代码: #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <thread> #include <iostream> int k = 0;…
引言 C++ 11自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些C++ 11的新特性,算是记录一下自己学到的东西吧,和大家共勉. 相信Linux程序员都用过Pthread,但有了C++ 11的std::thread以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名C++程序员,熟悉C++ 11的多线程编程方式还是很有益处的. 与C++ 11多线程相关的头文件 C++11新标准中引入了如下头文件来支持多线程编程,…
引言 C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉. 相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程编程方式还是很有益处的. 如果你对 C+…