
CPP
文章平均质量分 90
胖小迪
这个作者很懒,什么都没留下…
展开
-
C++ 多线程:std::future
概念我们前面介绍的std::thread 是C++11中提供异步创建多线程的工具,只能是异步运行任务,却无法获取任务执行的结果,一般都是依靠全局对象,全局对象在多线程下是及其不安全的,为此标准库提供了std::future类模板来关联线程运行的函数和函数的返回结果,这种获取结果的方式是异步的。std::future 通常由某个 Provider 创建,你可以把 Provider 想象成一个异步任务的提供者,Provider 在某个线程中设置共享状态的值,与该共享状态相关联的 std::future 对象调用原创 2022-04-02 16:18:13 · 14470 阅读 · 1 评论 -
C++多线程:thread_local
概念首先thread_local是一个关键词,thread_local是C++ 11新引入的一种存储期指定符。它会影响变量的存储周期(Storage duration),与它同是存储期指定符的还有以下几个:关键字说明备注auto自动存储期c++11前, “auto int x; ” 在c++11起错误register自动存储期。指示编译器将此对象置于处理器的寄存器中。c++17弃用static静态或者线程存储期的内部链接extern静态或者线程存储期的外部链接thread_local线程存储期c++11起m原创 2022-04-02 16:17:08 · 3607 阅读 · 1 评论 -
C++多线程:std::call_once
在多线程的环境下,有些时候我们不需要某个函数被调用多次或者某些变量被初始化多次,它们仅仅只需要被调用一次或者初始化一次即可。很多时候我们为了初始化某些数据会写出如下代码,这些代码在单线程中是没有任何问题的,但是在多线程中就会出现不可预知的问题。bool initialized = false;void foo() { if (!initialized) { &nbs原创 2022-03-31 06:44:10 · 2215 阅读 · 0 评论 -
C++多线程:Lambda表达式
定义Lambda 表达式可以说是c++11引用的最重要的特性之一,虽然跟多线程关系不大,但是它在多线程的场景下使用很频繁,所以在多线程这个主题下介绍它更合适。Lambda 来源于函数式编程的概念,也是现代编程语言的一个特点。C++11 这次终于把 Lambda 加进来了,令人非常兴奋,因为Lambda表达式能够大大简化代码复杂度(语法糖:利于理解具体的功能),避免实现调用对象。Lambda 表达式有如下优点:声明式编程风格:就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象。以更直接的方式原创 2022-03-31 06:43:08 · 7152 阅读 · 3 评论 -
C++多线程:condition_variable
官方定义在多线程编程中,有一种十分常见的行为:线程同步。线程同步是指线程间需要按照预定的先后次序顺序进行的行为。C++11对这种行为也提供了有力的支持,这就是条件变量(condition_variable和condition_variable_any)。条件变量位于头文件condition_variable下。condition_variable/condition_variable_any类是一个synchronization primitive,可用于阻止一个线程或同时阻止多个线程,直到另一个线程修改共原创 2022-03-26 07:50:31 · 2881 阅读 · 1 评论 -
C++多线程:锁管理(lock)
对于多线程,无法避免要使用到锁对共享资源的保护,这一节我们就来学习现代C++对于锁的管理(lock),上一节我们已经学习了现代C++对应的mutex,直到C++17,一共有六种类型。而今天学习的锁管理,与mutex息息相关,它们都是使用RAII风格来进行锁管理,主要有下面几种:std::lock_guard(C++11)std::unique_lock(C++11)std::share_lock(C++14)std::scoped_lock(C++17)首先来简单解释一下RAII这个名称的意思:❝「RAII原创 2022-03-26 07:49:38 · 12759 阅读 · 1 评论 -
C++ 多线程:互斥量(mutex)
C++ 11中的互斥量,声明在 <mutex> 头文件中,互斥量的使用可以在各种方面,比较常用在对共享数据的读写上,如果有多个线程同时读写一个数据,那么想要保证多线程安全,就必须对共享变量的读写进行保护(上锁),从而保证线程安全。互斥量主要有四中类型:std::mutex,最基本的 Mutex 类。std::recursive_mutex,递归 Mutex 类。std::time_mutex,限时 Mutex 类。std::recursive_timed_mutex,限时递归 Mutex 类。当原创 2022-02-23 21:29:26 · 2910 阅读 · 0 评论 -
C++多线程:std::thread
最近这段时间在学习C++多线程相关的知识,打算将学习的内容记录下来,加深理解和记忆。C++11 新标准中引入了五个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。<atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套C风格的原子类型和与C兼容的原子操作的函数。<th原创 2022-02-23 21:28:14 · 9781 阅读 · 0 评论 -
C++学习笔记:模板参数
C++学习笔记:模板参数本章节主要学习一下模板形参的基本知识。模板参数有三种类型:类型模板参数、模板的模板参数(以模板作为模板的参数)、非类型模板参数。类型模板参数类型模板参数是我们使用模板的主要目的。也就是普通的类型模板参数,模板参数(Template parameters)声明在函数名之前的尖括号内:template<typename T> // T是模板参数我们可以定义一个或者多个类型模板参数:template <typename原创 2022-02-11 07:19:51 · 5429 阅读 · 0 评论 -
C++学习笔记:类模板
上一章我们介绍了函数模板,今天这章我们来学习类模板。类模板声明template是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是「类型参数」 ,也可以是**非类型参数。**类型参数由关键字class或typename及其后面的标识符构成。非类型参数由一个普通参数构成,代表模板定义中的一个常量(后面再单独学习模板参数)。// T为类型参数,size为非类型参数template<class T, int size>class&原创 2022-02-11 07:18:57 · 747 阅读 · 0 评论 -
C++学习笔记:函数模板
函数模板C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表,是一种对类型进行参数化的工具。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。C++模板通常有两种形式:函数模板和类模板;这篇文章主要讲函数模板相关知识,函数模板是那些被参数化的函数,它们代表的是一个函数家族。它的表示(即外形)看起来和普通的函数很相似,唯一的区别就是有些函数元素是未确定的,这些元素将原创 2022-01-20 06:54:31 · 662 阅读 · 0 评论