qls315
大厂C++
展开
-
C++多线程--线程安全的单例模式
由于最近事情比较多,所以很久没有更新相应的专栏了。目前事情基本告一段落,重新恢复相应专栏的更新。本文主要讲解在C++并发编程中如何实现线程安全的单例模式。本文主要由如下几部分构成臭名昭著的double-check单例实现四种线程安全的单例模式单例模式使用中所带来的一些坑原创 2023-03-05 22:01:35 · 1315 阅读 · 1 评论 -
C++11多线程--并行前缀和
很久没有写文章了,在新的一年,希望这篇文章能帮助大家进一步理解并行前缀和。如果你此刻已经读过第2版的第8章,那么你会遇到作者关于实现并行版本的代码。并行中计算前缀和也即并行前缀和。本文主要讲解。原创 2022-12-23 21:27:51 · 816 阅读 · 0 评论 -
C++11多线程 内存序(std::memory_order_seq_cst )
C++11多线程内存序内存模型为什么要有内存模型C++11的内存模型种类各个内存模型介绍及代码测试memory_order_seq_cst 顺序一致性模型内存模型内存模型介绍为什么要有内存模型多线程环境下,如果保持顺序一致性会降低CPU性能,代价很大,不利于程序优化。如果想要进行程序的优化,需要编译器和CPU之间遵守相同的约定,这个约定便是内存模型C++11的内存模型种类C++11提...原创 2020-04-02 16:55:56 · 4764 阅读 · 0 评论 -
C++11多线程 内存序(std::memory_order_relaxed)
1原创 2021-08-26 16:45:19 · 14435 阅读 · 2 评论 -
C++多线程--C++异常处理(1)
异常(exception)是现代C++中的一个特性,使用该特性可以将程序的异常处理和正常程序接耦。一个异常(exception)是一个错误事件,对程序运行时出现的异常情况的响应,例如尝试除以零。异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。C++ exception可由throw表达式,typeid,new表达式,allocation函数,以及任何被指定为抛出异常以指示某些错误情况的标准库函数(例如 std::vector::at、std::string::substr 等)抛出。原创 2023-04-18 13:40:30 · 620 阅读 · 1 评论 -
深入理解Modern C++智能指针std::shared_ptr
现代C++为了解决内存泄露以及资源回收等问题,引入了智能指针的概念。在日常的C++实践中也是高频使用。本文是在实践过程中,对现代C++中的智能指针进行的一个稍微全面的总结。本文主要讲解std::shared_ptr的相关内容。std::shared_ptr也即智能指针,采用RAII手法,是一个模版对象。std::shared_ptr表示某一个资源的共享所有权。可以通过如下两种方式创建std::shared_ptr对象2 实现原理此处以如下代码为例,讲解std::shared_ptr的实现原理原创 2022-06-02 17:22:08 · 2483 阅读 · 2 评论 -
C++多线程--线程安全的队列实现(基于锁)
本文参考C++ Concurrency in Action (豆瓣)讲解并给出了完整的基于锁的线程安全的队列。下一篇讲解基于锁的哈希表。原创 2023-04-11 19:43:16 · 1238 阅读 · 0 评论 -
C++多线程--发现接口间固有竞争
第三章相关的知识--发现接口间固有竞争。一个线程安全的堆栈实现。接口间为什么会有竞争。如何解决接口间的竞争。原创 2023-01-04 22:26:05 · 546 阅读 · 0 评论 -
C++11多线程--使用锁(mutex)保护数据(1)
根据可知,std::mutex是C++标准库提供的一个同步原语,可以用来保护多线程间共享数据的不变量被破环。std::mutex提供了如下三个常用接口lock 锁住mutex,如果这个mutex已经被锁住,那么相应线程将被阻塞try_lock 如果mutex不可用,则立马返回,如果可用则锁住mutexunlock 解锁std::mutex一般和std::lock_guard, std::unique_lock以及std::scoped_lock结合使用。下面给出。原创 2022-11-10 15:31:30 · 997 阅读 · 0 评论 -
C++11多线程--线程间共享数据(存在的问题)
本文简单的总结了C++ Concurrency in Action (豆瓣)中第三章中3.1节相关的内容,并给出相应的解释。原创 2022-10-23 17:38:49 · 718 阅读 · 0 评论 -
C++多线程--std::thread
在C++多线程专栏中,我讲解了std::async,std::future,std::promise以及内存序相关概念,基本上涵盖了C++事件处理相关的基本构建块。为了保证对C++多线程中相关线程概念的全部介绍,后期会增加相应的std::thread, std::mutex, std::lock_guard, std::unique_lock等相关介绍。而本文便是第一部分,std::thread的相关介绍和使用讲解。一个std::thread代表一个可执行单元。简单来说下面是四种创建线程的方式若你构建原创 2022-08-14 17:10:37 · 1365 阅读 · 1 评论 -
C++多线程--std::async
stdasync的行为类似一个异步函数调用。stdasync是一个可变函数模版,其可以接受一个可调用对象和相应的函数参数。stdasync返回值为一个stdfuture,通过该future的get接口可以获得可调用对象的返回值。关于stdasync的声明,可参考如下stdtype(type...)>type>此处需要对stdasync进行一定的使用说明stdasync应该是C++多线程编程中首先所考虑使用的。std通过本文可以了解stdstd。...原创 2022-07-16 16:59:02 · 1011 阅读 · 0 评论 -
C++多线程--std::packaged_task
本篇文章介绍 用于实现现代C++多线程中Task的另一个工具模版类:std::packaged_task.关于C++多线程实现Task的工具模版类,前面已经介绍了std::promise 和 std::future, 具体可参考C++多线程 task--std::promise和std::future_qls315的博客-优快云博客std::packaged_task是一个模版类,其主要有如下几个功能std::packaged_task的函数声明如下所示由上述模版声明可知,std::packaged原创 2022-07-09 15:14:05 · 671 阅读 · 0 评论 -
C++多线程std::condition_variable(条件变量)
在上篇文章C++多线程 task--std::promise和std::future_qls315的博客-优快云博客介绍了std::promise和std::future,其可以模拟一次性事件通知机制(这也是条件变量的功能之一)为了补充相应的事件通知机制相应的方式,本文继续介绍std::condition_variable(条件变量).条件变量是一种C++标准提供的同步原语,其可以用来阻塞一个或者多个线程,直到某个线程修改了共享变量(condition),并且向条件变量发送通知。执行修改共享变量的线程,必原创 2022-07-03 17:02:19 · 758 阅读 · 0 评论 -
C++多线程 task--std::promise和std::future
本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接原创 2022-06-26 15:59:09 · 1577 阅读 · 0 评论 -
C++11多线程内存序--X86-TSO内存模型
针对C++11多线程内存序相关的理解,我写过如下文章C++11多线程 内存序(std::memory_order_seq_cst )_qls315的博客-优快云博客_memory_order_seq_cstC++11多线程 release sequence_qls315的博客-优快云博客C++11多线程 内存序(std::memory_order_consume)_qls315的博客-优快云博客_memory_order_consumeC++11多线程 内存序(std::memory_order_ac原创 2022-06-04 17:10:38 · 767 阅读 · 0 评论 -
C++11多线程 内存屏障(fence/atomic_thread_fence)
0 引言在前述文章中,我有针对C++11种的六种内存序(memory order)进行相应的讲解,其文章如下C++11多线程 内存序(std::memory_order_seq_cst )C++11多线程 内存序(std::memory_order_consume)C++11多线程 内存序(std::memory_order_acquire/release)C++11多线程 内存序(std::memory_order_relaxed)如果不补充C++11种关于fence的讲解,那么内原创 2022-05-29 17:15:13 · 3575 阅读 · 4 评论 -
C++并发编程--第二章--线程管理
1. threadC++11中,支持多线程编程的标准卡#include<thread>#include <iostream>#include <thread>void hello(){ std::cout<<"Hello World\n";}int main() { std::thread t(hello); t.join();}std::thread 定义一个线程对象,线程对象t 拥有一个可执行线程的所有权,其初.原创 2020-05-18 13:32:12 · 579 阅读 · 1 评论 -
C++并发编程--第三章--线程间共享数据
1. 线程间共享数据存在的问题所有线程间共享数据的问题,都是修改数据导致的(竞争条件)。如果所有的共享数据都是只读的,就没问题,因为一个线程所读取的数据不受另一个线程是否正在读取相同的数据而影响。(引用https://blog.youkuaiyun.com/xy_cpp/article/details/80646443)。2. 利用锁(mutex)保护共享数据2.1 使用C++11中的std::mutex在C++11中,你可以通过std::mutex的构造函数创建一个std::mutex实例,通过调用l原创 2020-06-15 15:59:19 · 970 阅读 · 0 评论 -
C++并发编程实践--读书笔记系列
记录学习过程原创 2020-05-13 16:13:42 · 252 阅读 · 0 评论 -
C++并发编程器第4章--同步并发操作
0. 引言原创 2020-07-05 15:47:01 · 527 阅读 · 0 评论 -
C++并发编程器第4章--同步并发操作(二)
2. 利用futures等待一次性事件原创 2020-07-25 17:03:08 · 186 阅读 · 0 评论 -
C++11多线程 release sequence
引言C++11多线程系列主要介绍和讲解现代C++中多线程中内存模型/内存序等相关的知识,后期可能扩展为C++多线程中各个组件相关的内容。本原创 2021-11-05 14:03:33 · 766 阅读 · 0 评论 -
C++11多线程 内存序(std::memory_order_consume)
引言在C++多线程 内存序系列文章中,已经介绍了如下三种内存序C++11多线程 内存序(std::memory_order_seq_cst )C++11多线程 内存序(std::memory_order_acquire/release)C++11多线程 内存序(std::memory_order_relaxed)为了保持该系列文章的完整性,因此增加std::memory_order_consume的介绍。std::memory_order_consume仅仅只用来补充该系列的完整性,原创 2021-10-12 13:55:44 · 1171 阅读 · 0 评论 -
C++11多线程 内存序(std::memory_order_acquire/release)
引言acquire/release定义代码示例总结原创 2021-09-23 11:26:05 · 2929 阅读 · 2 评论