
程序语言C++系列
文章平均质量分 86
系统地介绍C++程序语言
IT_Beijing_BIT
IT老兵
展开
-
C++并行处理支持库 之六
通过使用Futures标准库,我们可以获取异步任务返回值,捕获异步任务引发的异常。异步任务就是在独立线程中启动运行的函数。这些值以共享状态进行通信,其中异步任务可以写入其返回值,或存储异常,并且可以其他线程检查、等待或以其他方式操作,这些线程包含std::future或std::shared_future实例,而std::future或std::shared_future引用该共享状态。原创 2025-01-01 11:00:53 · 385 阅读 · 0 评论 -
C++并行处理支持库 之五
当控制权离开创建scoped_lock对象的作用域时,scoped_lock将被破坏,并释放互斥锁。锁定shared_lock会在共享模式下,锁定关联的共享mutex,要在独占模式下锁定它,可以使用std::unique_lock。scoped_lock类是一个mutex包装器,它提供了一种方便的RAII风格的机制,用于在作用域块的持续时间内,拥有零个或多个mutex。lock_guard 类是一个互斥锁包装器,它提供了一种方便的RAII样式机制,用于在作用域块的持续时间内,拥有互斥锁。原创 2025-01-01 09:01:06 · 934 阅读 · 0 评论 -
C++并行处理支持库 之四
条件变量是一个同步原语,允许多个线程相互通信。它允许一定数量的线程等待(可能超时)来自另一个线程的通知,它们可以继续。条件变量始终与互斥锁相关联。std::condition_variable 是一种与 std::mutex 一起使用的同步原语,用于阻止一个或多个线程,直到另一个线程修改共享变量(条件),并通知 std::condition_variable。获取 std::mutex(通常通过 std::lock_guard)。在拥有锁的情况下修改共享变量。原创 2024-12-31 12:34:42 · 898 阅读 · 0 评论 -
C++动态内存管理 之一
在默认初始化范围 [first, last) ,指定的未初始化存储中构造 typename std::iterator_traits::value_type 类型的对象。该将 [first, last) 范围内的元素复制到从 d_first 开始的未初始化内存区域。如果包括policy参数,则按照policy执行。将元素从 [first, last) 范围移动到从 d_first 开始的未初始化内存区域。下面代码将初始化存储器区域到约定值。上述代码运行屏幕输出。上述代码运行屏幕输出。上述代码运行屏幕输出。原创 2024-12-03 12:49:15 · 798 阅读 · 0 评论 -
C++ 智能指针smart pointer 之二
当通过调用std::make_shared或std::allocate_shared创建shared_ptr时,控制块和托管对象的内存都是通过单个分配创建的。此函数调用的 std::shared_ptr 构造函数启用带有指向新构造的T类型对象的指针的 shared_from_this。std::shared_ptr 是一个智能指针,它通过指针保留对象的共享所有权。Shared_ptr 直接持有的指针是 get() 返回的指针,而控制块持有的指针/对象是当共享所有者数量为零时将被删除的指针/对象。原创 2024-12-03 12:48:32 · 1044 阅读 · 0 评论 -
C++ 智能指针smart pointer 之一
如果T是某个基B的派生类,则 std::unique_ptr 可以隐式转换为 std::unique_ptr<B>。生成的 std::unique_ptr<B> 的默认删除器将使用 B 的删除运算符,从而导致未定义的行为,除非 B 的析构函数是虚拟的。std::unique_ptr 是一个智能指针,它通过指针拥有并管理另一个对象,并随后在 unique_ptr 超出范围时,处置该对象。下列程序实例说明如何释放std::unique_ptr指针和std::unique_ptr指向的对象。原创 2024-11-30 04:33:58 · 948 阅读 · 0 评论 -
C++的线程管理
这些提供者中的每一个(要么是promise或packaged_task对象,要么是对async的调用)与未来对象共享对共享状态的访问:提供者使共享状态准备就绪的点与未来对象访问共享状态的点同步状态。函数模板 std::async 异步运行函数 f ,可能在一个单独的线程中,该线程可能是线程池的一部分,并返回一个 std::future ,它最终将保存该函数调用的结果。默认构造的(未初始化的)线程对象是不可连接的,并且它的线程 id 对于所有不可连接的线程都是通用的。future 对象仅在有效时才有用。原创 2024-07-06 04:23:10 · 1884 阅读 · 0 评论 -
C++ 的常见算法 之三
这篇文章主要介绍C++编程语言的算法,是介绍C++语言算法的最后一篇。原创 2024-07-05 07:26:44 · 1030 阅读 · 0 评论 -
C++ 的常见算法 之二
重新排列 [first,last) 范围内的元素,pred 返回 true 的所有元素排在返回 false 的所有元素之前, 但与partition函数不同,这个函数保留每个组内元素的相对顺序。迭代器返回指向第二组的第一个元素的点。重新排序 [first,last) 范围内的元素,得到的序列是,第 n 个位置的元素位置是,完全排序后,该元素所在的位置。在结果序列中,其他元素没有任何特定的顺序,第 n 个元素前面的所有元素,都小于或对于该元素,它后面的元素都大于或等于它。程序运行结果屏幕输出。原创 2024-07-04 08:08:40 · 478 阅读 · 0 评论 -
C++ 的常见算法 之一
【代码】C++ 的常见算法 之一。原创 2024-07-04 02:35:24 · 468 阅读 · 0 评论 -
Linux设备驱动器 之一 工作(worker)线程
kthread_create_worker产生一个struct kthread_create_info变量,并将这个变量加入到一个待产生线程链表中,这个链表的表头是kthread_create_list。spi_init_queue调用kthread_create_worker,kthread_init_work, 去产生SPI任务工作线程,细节见下面的代码段。它检查这个任务线程的任务工作链表,如果非空,那么就从任务工作链表上取下一个任务工作 并运行它的回调函数。例如,当任务工作线程停止并再次启动时。原创 2024-07-08 09:32:06 · 986 阅读 · 0 评论 -
C++17的新特征
C++17的新特征结构化绑定绑定数组绑定一个tuple类型绑定数据成员if/switch 的初始化语句if语句初始化switch语句初始化inline变量constexpr if折叠表达式左结合二元运算符右结合二元运算符类模板的模板参数推导auto 说明非类型模板参数结构化绑定结构化绑定就是将指定的名称和初始化器的子对象或元素绑定。与引用一样,结构化绑定是现有对象的别名。与引用不同的是,结构化绑定不必是引用类型。下面展示一些 内联代码片。attr(optional) cv-auto ref-qua原创 2022-03-19 20:32:11 · 1324 阅读 · 0 评论 -
C++模板参数推导
模板参数推导原创 2022-01-15 14:12:38 · 1385 阅读 · 0 评论 -
进程间通讯技术之一 共享存储器
共享文件文件共享例子。#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#define FileName "data.dat"#define DataString "Now is the winter of our discontent\nMade glorious summer by this原创 2021-08-18 09:44:59 · 802 阅读 · 0 评论 -
C++中的继承public, protected和private
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-06-08 22:57:30 · 1090 阅读 · 1 评论 -
程序设计模式之二
程序设计模式之二中介模式观察者模式中介模式观察者模式观察者模式是一种软件设计模式,在这个模式中,一个对象(称为主体)维护一组依赖项,这些依赖项也被称为观察者,通常,通过调用它们的方法之一来自动通知它们任何状态更改。它主要用于在“事件驱动”软件中,实现分布式事件处理系统。在这些系统中,主体通常被称为“事件流”或“事件流源”,而观察者被称为“事件接收器”。这种模式非常适合任何进程,在启动时CPU不知道数据输入何时到达,它们是“随机”到达,HTTP 请求、GPIO 数据、来自键盘/鼠标的用户输入都属于这原创 2021-05-30 04:52:26 · 225 阅读 · 0 评论 -
C++标准库中的算法与应用之一
C++标准库中的算法与应用非修改序列操作all_of/any_of/none_offor_eachcount/count_iffor_each三级目录非修改序列操作all_of/any_of/none_offor_each按顺序将给定的函数对象f应用于解引用范围为[first,last)的每个迭代器的结果。将给定的函数对象f应用于解引用[first,last)范围内的每个迭代器的结果(不一定按顺序)。该算法是根据策略执行的。除非std :: is_execution_policy_v <s原创 2021-05-24 10:43:24 · 1614 阅读 · 2 评论 -
程序设计模式
程序设计模型连接池和线程池C ++线程池Singleton抽象工厂工厂模式(Factory Method)连接池和线程池在程序设计中,线程池是一种软件设计模式,用于实现计算机程序中的执行并发。线程池通常也称为复制的工作程序,或工作人员工作组模型,维护着多个线程,等待任务分配给监督程序并发执行。通过维护线程池,该模型可提高性能并避免由于频繁创建和销毁短命任务的线程而导致执行延迟。可用线程的数量已调整为程序可用的计算资源,例如执行完成后的并行任务队列。线程池的大小是为执行任务而保留的线程数。它通常是应用程原创 2021-05-23 06:02:18 · 714 阅读 · 3 评论 -
如何更好地使用C++线程
正确使用C++线程线程池等待线程完成C + 11中引入了多线程支持。在C ++ 11之前,我们必须在C中使用POSIX线程或p线程库。尽管该库完成了工作,但缺少任何提供功能集的标准语言都会导致严重的可移植性问题。 C ++ 11消除了所有这些,并为我们提供了std :: thread。线程类和相关函数在线程头文件中定义。std :: thread是表示C ++中单个线程的线程类。要启动线程,我们只需要创建一个新的线程对象并将要调用的执行代码(即可调用对象)传递到该对象的构造函数中即可。创建对象后,将启动原创 2021-05-16 00:16:52 · 336 阅读 · 0 评论 -
如何使用C++虚函数与抽象类/接口
虚函数原创 2021-05-07 22:51:05 · 680 阅读 · 0 评论