- 博客(180)
- 资源 (24)
- 收藏
- 关注
原创 c++线程之std::async浅析
指定该策略时,std::async会立即创建一个新的线程(或复用线程池中的线程),并在新线程中执行目标任务,任务的执行与主线程完全并行。指定该策略时,任务不会立即执行,也不会创建新线程;只有当调用或时,任务才会在调用者线程(通常是主线程)中同步执行。这是std::async未指定策略时的默认行为(C++17 也可写为),本质是“异步或延迟”的二选一,由编译器/操作系统决定采用哪种方式。std::asyncasync强制并行,deferred延迟同步,默认策略由系统自动选择;
2026-01-06 17:36:04
25
原创 c++线程之标准库的并行算法研究
C++17并行算法基于执行策略seqparpar_unseq)驱动,无需手动管理线程,核心头文件为<numeric>;常用并行算法包括(遍历)、std::sort(排序)、(转换)、(聚合),各有明确适用场景;并行算法底层执行流程为「任务拆分→线程调度→并行执行→结果汇总(聚合类)→同步返回」;关键优化点:优先使用par策略、选择随机访问迭代器容器、保证无数据竞争、仅大数据量场景启用并行。执行策略完整名称常用别名执行模式线程特性核心约束适用场景纯串行执行单线程(调用线程)
2026-01-04 17:34:38
135
原创 c++线程之任务
C++中的任务是一段待执行的逻辑单元,它封装了需要完成的具体工作(如计算、IO操作、业务逻辑等),本质上表现为「可调用对象(Callable Object)」—— 任务只定义「要做什么」,不关心「谁来执行(线程)」和「什么时候执行(同步/异步)」。任务 = 一份「工作清单」(只写了要做什么,没人执行就是废纸);线程 = 一个「工人」(消耗粮食(系统资源),能按清单执行工作,一个工人可以做多份清单,一份清单也可以分给多个工人做);
2026-01-04 16:58:17
96
原创 c++线程之再研究研究多线程
启动差异:C++11 线程无需手动调用start()构造时传入可调用对象即自动启动底层线程(与 Java 线程核心区别)。可连接状态对象的「可连接性」是核心,joinable()返回true时,必须调用join()或detach(),否则对象析构崩溃。阻塞场景:C++11 标准库支持三种常见阻塞:时间阻塞(sleep_for)、锁竞争阻塞(std::mutex)、条件阻塞(终止处理:线程内未捕获的异常会导致程序崩溃,需在线程内部做好异常捕获;线程正常终止后,通过join()回收资源。分离线程。
2026-01-04 16:55:34
408
原创 多线程与锁
若线程t既未调用t.join(),也未调用t.detach(),则t处于可汇入状态(通过成员函数可判断,返回true本质:线程t的“生命周期”仍与创建它的线程对象()绑定,尚未完成资源的最终回收或分离。C++互斥锁的核心是“通过灵活的临界区管控,平衡共享数据的安全性与并发效率选对互斥对象:根据“是否递归”“是否限时”“是否读写分离”需求,选择std::mutex;用对锁定方式:递归场景用,超时场景用,读多写少用的共享锁;优先RAII锁:避免手动lock()unlock()
2026-01-04 16:15:48
638
原创 C++线程之内存模型
该结构体的内存模型受位域规则:0截断)、自然对齐(char填充3字节、double8字节对齐)、类型大小(int4字节、double8字节)共同影响;汇编代码通过成员偏移地址和位运算指令,精准验证了理论布局,位域成员依赖整数单元+位运算访问,区分结构体自身内存与堆内存;核心关键:匿名位域:0强制结束位域单元、基础类型对齐要求、非基础类型(std::string)的内存分布特性。单个线程内:所有内存操作严格按照代码的书写顺序执行(无指令重排,或重排对程序员完全透明)跨线程间。
2026-01-04 15:21:25
517
原创 C++17完整导引-组件之std::string_view
在`C++17`中,`C++`标准库引入了一个特殊的字符串类:`std::string_view`
2023-06-28 20:49:36
3170
原创 C++17完整导引-组件之std::byte
std::byte 是一种独立类型,它实现指定于 C++ 语言定义中的字节的概念。同 char 与 unsigned char ,它能用于访问其他对象所占据的生内存(对象表示),但不同于这些类型,它不是字符类型且非算术类型。 byte 只是位的汇集,而且只对它定义逐位运算符。
2023-06-13 09:58:05
2029
原创 C++17完整导引-新组件之std::any
std::any is the smarter void*/shared_ptr. You can initialize an any with a value of any copyable type
2023-05-29 10:39:00
1955
原创 设计模式-基本概念
一个被共享的对象不能直接把自身的原始指针(raw pointer)this传递给std::shared_ptr的容器对象(如一个std::vector),因为这会生成该被共享的对象的额外的共享指针控制块。为此,std::shared_ptr API提供了一种类模板设施std::enable_shared_from_this,包含了成员函数shared_from_this,从而允许从this创建一个std::shared_ptr对象。声明一个实现所有三个类的特征的类型的变量,而不必实际构造一个全新的。
2023-05-05 10:26:55
636
原创 windows安装ubuntu时错误WslRegisterDistribution failed with error: 0x8007023e的解决方法
我按照文档激活 wsl 2,然后尝试安装 Linux 发行版,但失败并出现以下错误正在安装,这可能需要几分钟...WslRegisterDistribution 失败,出现错误:0x8007023e错误:0x8007023e {应用程序错误}异常 s (0x
2023-04-06 19:53:34
5877
3
原创 C++std::async 简单研究
它是 `c++ `标准库提供的 `API`,用于异步(创建单独的线程)或同步(正常调用函数)执行任务(作为参数传递)。 这取决于启动策略。
2022-10-13 15:18:15
852
原创 Effective Modern C++[实践]->只要有可能使用constexpr,就使用它
- `constexpr`变量具备`const`属性,且必须由编译器已知的值完成初始化。>- `constexpr`函数在调用时,若传入的实参值都是编译期已知的,则返回的结果也是`constexpr`变量,否则返回非`constexpr`变量>- 比起非`constexpr`变量或`constexpr`函数而言,`constexpr`函数或`constexpr`变量可以用在一个作用域更广的语境中>- `constexpr `是对象和函数接口的一部分。
2022-09-28 17:19:18
1138
原创 c++ 关于注释的故事
注释用于向读取代码的人指示某些内容。注释被编译器视为空白,不会改变代码的实际含义。`C` 语言中有两种注释语法,原始的`/* */`和稍微新一点的`//`。一些文档系统如`Doxygen`使用特殊格式的注释来帮助生成代码的文档。
2022-09-21 18:29:09
402
翻译 深入C++:书籍|工具|教程|博客|社区
不要被“精通 C++”这个标题冲昏了头脑。 这是一个永无止境的旅程。 因为 ISOCPP 每三年 释放一次小象。 目前该标准涵盖近 1500 页,C++ 并不是最容易学习和掌握的语言。 我已经在这个行业度过了足够多的时间。 但有时还是觉得冒名顶替。 我想分享我的 现代 C++ 之旅已经有一段时间了。 虽然,我正在通过这些文章一点一点地分享知识。 但是,还有其他一些东西帮助我度过了这段旅程,比如在线工具、书籍、课程、博客等。所以,以下是这些项目的无序列表。
2022-09-01 21:17:06
263
原创 Effective Modern C++[实践]->只要函数不会发射异常,就为其加上noexcept
noexcept声明式函数接口的组成部分,这意味着调用方可能会对它有依赖 相对于不带noexcept声明的函数,带有noexcept声明的函数有更多的机会得到优化 noexcept对于移动语义swap,内存释放函数和析构函数非常有用 大多数函数是异常中立的,而不是noexcept...
2022-08-30 15:51:43
416
原创 Effective Modern C++[实践]->优先使用 const_iterator 而非 iterator
优先使用 `const_iterator` 而不是` iterator`。任何时候只要你需要一个迭代器而其指涉内容没有修改必要时,你就应该使用`const_iterator `
2022-07-06 16:31:25
769
原创 Effective Modern C++[实践]->使用 override 关键字声明要重写的函数
用关键字 override 声明覆盖函数。成员函数引用后置修饰符可以区别对待左值和右值对象
2022-07-04 20:37:26
451
原创 Effective Modern C++[实践]->优选delete关键字删除函数,而非private未定义函数
如果使用特殊语法 `= delete ;`取代函数体,那么该函数被定义为弃置的`(deleted)`。**任何弃置函数的使用**都是非良构的(程序无法编译)。
2022-07-04 14:27:29
586
原创 Effective Modern C++[实践]->优先使用 scoped enums,而非 unscoped enums
1. `C++98` 风格的枚举,现在称作为` unscoped enum`。2. `scoped enum` 的枚举元素只在` enum` 内可见, 元素只能强制转换成其他类型。3. `scoped enum` 和` unscoped enum` 都可以指定潜在类型。 `scoped enum `默认是 `int`,`unscoped enum `没有默认类型。4. `scoped enum` 总是能前置声明,`unscoped enum` 只有指定了潜在类型, 才可以前置声明。.........
2022-07-01 11:14:00
930
原创 Effective Modern C++[实践]->优先选用别名声明,而非typedef
typedef 不支持模版化,但是using的别名声明可以; 模版别名避免了传统的typedef带来的::type后缀,以及在类型引用的时候需要的typename前缀; C++14给所有的C++11模版类型萃取提供了别名
2022-06-30 18:26:01
399
原创 Effective Modern C++[实践]->优先使用nullptr,而非0或NULL
1. 优先使用 nullptr,而不是 0 和 NULL2. 避免在整数和指针类型上重载
2022-06-30 11:03:27
682
原创 Effective Modern C++[实践]->在创建对象时注意区分()和{}
{}初始化是最广泛的初始化语法,它可以阻止窄化转换,并且避免了C++最复杂的语法解析
2022-06-29 18:31:36
1033
原创 Effective Modern C++[实践]->auto类型推导不符合要求时,使用强转
带显示型别的初始化物习惯用法强制auto推导出你想要的类型
2022-06-28 15:55:22
481
MVP-010-隔膜泵使用说明.docx
2020-01-08
AltaCore-1553文档翻译.pdf
2020-03-24
信号与槽的两种深度玩法源码
2022-02-18
log4Qt.rar
2020-03-12
QT高精度定时器
2018-08-23
win10找不到gpedit.msc时的批处理文件
2020-07-08
gsl-msys.rar
2020-02-14
QtXlsx编译包.rar
2020-02-17
MultiThreadTest.rar
2019-11-21
qt 多线程共享全局缓冲区
2020-11-24
IMgReader程序的测试数据文件
2020-09-27
testPylon5.rar
2019-11-25
抽奖关键类代码实现.rar
2019-12-05
ConcurrentComputationTest.rar
2019-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅