并发编程
文章平均质量分 69
多线程为基础了解并发
吃米饭
这个作者很懒,什么都没留下…
展开
-
C++11 线程池
cpp#include<thread>#include<mutex>#include<vector>#include<condition_variable>#include<boost/circular_buffer.hpp>#include<functional>#include<atomic>#include<cassert>class ThreadPool{public: ex.原创 2022-03-09 21:48:27 · 1596 阅读 · 0 评论 -
C++ 并发
何为进程?何为线程?两者有何区别?进程是系统资源分配的基本单位,线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。怎么理解,线程是需要扔到CPU去执行的,所以它自己只包括CPU执行的基本数据,如程序计数器,堆栈信息,寄存器等,其他资源都是共享的;进程是地址空间的抽象,是虚拟的,它包含一个程序要运行的一些基本资源,如I/O,文件描述符,进程数据,地址空间等,它是用来管理整个程序运行的资源的,当然它也包括上下文切换,CPU调度等,但它的调度最终还是执行在线程原创 2022-02-24 18:07:08 · 1439 阅读 · 0 评论 -
C++ 线程
thread类 thread 表示单个执行线程。线程允许多个函数同时执行。线程在构造关联的线程对象时立即开始执行(等待任何OS调度延迟),从提供给作为构造函数参数的顶层函数开始。顶层函数的返回值将被忽略,而且若它以抛异常终止,则调用 std::terminate 。顶层函数可以通过 std::promise 或通过修改共享变量(可能需要同步,见 std::mutex 与 std::atomic )将其返回值或异常传递给调用方。std::thread 对象也可能处于不表示任何线程的状态(默认构造、被移动原创 2022-03-02 22:58:15 · 6591 阅读 · 0 评论 -
C++ 互斥
mutexmutex 类是能用于保护共享数据免受从多个线程同时访问的同步原语。mutex 提供排他性非递归所有权语义:调用方线程从它成功调用 lock 或 try_lock 开始,到它调用 unlock 为止占有 mutex 。线程占有 mutex 时,所有其他线程若试图要求 mutex 的所有权,则将阻塞(对于 lock 的调用)或收到 false 返回值(对于 try_lock )。调用方线程在调用 lock 或 try_lock 前必须不占有 mutex 。若 mutex 在仍为任何线程原创 2022-03-02 22:59:29 · 843 阅读 · 0 评论 -
C++ 通用锁管理
lock_guard类 lock_guard 是互斥体包装器,为在作用域块期间占有互斥提供便利 RAII 风格机制。创建 lock_guard 对象时,它试图接收给定互斥的所有权。控制离开创建 lock_guard 对象的作用域时,销毁 lock_guard 并释放互斥。lock_guard 类不可复制。成员类型 mutex_type Mutex成员函数成员函数 (构造函数) 构造 lock_guard ,可选地锁定给定的互斥(公开成员函数) (析构函数) 析构 lock_guard 对象,原创 2022-03-02 23:00:41 · 643 阅读 · 0 评论 -
C++ 条件变量
condition_variablecondition_variable 类是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知 condition_variable 。有意修改变量的线程必须获得 std::mutex (常通过 std::lock_guard )在保有锁时进行修改在 std::condition_variable 上执行 notify_one 或 notify_all(不需要为通知保有锁)即使共享变量是原子的,也必须在互斥下修改它,以正原创 2022-03-02 23:01:38 · 313 阅读 · 0 评论 -
C++ future
promise空模板非 void 特化,用于在线程间交流对象void 特化,用于交流无状态事件类模板 std::promise 提供存储值或异常的设施,之后通过 std::promise 对象所创建的 std::future 对象异步获得结果。注意 std::promise 只应当使用一次。每个 promise 与共享状态关联,共享状态含有一些状态信息和可能仍未求值的结果,它求值为值(可能为 void )或求值为异常。 promise 可以对共享状态做三件事:使就绪: promise 存储原创 2022-03-02 23:03:25 · 5340 阅读 · 0 评论 -
C++ atomic
thread#include <iostream>#include <utility>#include <thread>#include <chrono> void f1(int n){ for (int i = 0; i < 5; ++i) { std::cout << "Thread 1 executing\n"; ++n; std::this_thread::slee原创 2022-03-02 23:21:41 · 2040 阅读 · 0 评论