C++多线程
文章平均质量分 93
个人学习 C++ 多线程的思考和记录
wingのpeterPen
大概是个很普通但很真实的男孩子
展开
-
atomic包装自定义类型
在学习原子变量之初,学过很多它的操作,但是很多都是在内置类型(int、long等)上进行的学习和实验。这次由于工作需要,要使用atomic来包装自定义类型,因此打算好好探究一番,把它彻底搞懂。当要使用atomic包装自定义类型的时候首先肯定会产生疑问——C++是否支持这样使用?于是乎,去 cppreference 上搜了一下(C++17版本、其他的版本也支持),发现允许使用atomic包装平凡拷贝()的自定义类型。这时候又会有一个疑惑什么是平凡拷贝?如何确定自己定义的类型是不是平凡拷贝的?原创 2024-05-24 15:26:41 · 816 阅读 · 0 评论 -
C++多线程序列——理解 memory barrier
在了解 memory barrier 之前需要先了解 CPU 存储级别,缓存一致性协议,内存屏障这些概念。原创 2024-01-16 11:24:42 · 1488 阅读 · 0 评论 -
C++多线程系列——std::future | std::promise
在 C++ 11 之前,想要从线程返回执行任务的结果,可以通过指针来完成。可以看到,要通过指针来传递结果,在操作上比较复杂需要涉及到mutex,且逻辑上没有那么舒服。因此 C++ 提供了类模板。原创 2024-04-18 21:23:21 · 760 阅读 · 0 评论 -
C++多线程系列——基本概念&使用
在 C++ 中,我们可以通过构造 std::mutex (mutual exclusion)的实例来创建互斥,调用成员函数 lock() 对其加锁,调用 unlock() 解锁。但是不推荐直接调用成员函数的做法,因为这样做,那我们就必须在该函数的每条路径上都调用 unlock(),包括异常导致退出的路径。取而代之,C++标准库提供了类模板 std::lock_guard,针对互斥类融合RAII手法:在构造的时候给互斥加锁,在析构时进行解锁,从而保证互斥总被正确解锁。原创 2024-01-08 22:52:39 · 1596 阅读 · 0 评论 -
C++多线程系列——分析&手写C++线程池
在计算机编程中,线程池是一种为了让程序可以并发执行的软件设计模式,也叫作 replicated worker 或者 worker-crew model(为什么都带有worker呢?我觉得是因为可以线程池并不生产任务,只是执行任务,是卑微的打工人)。线程池中维护了多个等待 task 的线程,并且有一个保存待执行 task 的 task queue(复杂的线程池实现还会有 completed taskqueue),当 task 被线程池的使用者分配并加入到 task queue 时,等待的线程会执行这些任务。原创 2024-04-21 15:21:29 · 678 阅读 · 0 评论