同步机制
同步机制同步机制让多个线程以正确的顺序访问共享状态。选择原则很简单:一个独立的简单状态可考虑原子对象;要维护多个数据或多个步骤之间的不变量时,优先使用互斥锁保护临界区。 选择同步原语 工具 解决的问题 不能替代什么 std::mutex + RAII 锁 互斥访问复杂共享状态 事件通知与任务结果传递 std::condition_variable 等待受互斥锁保护的条件变化 对条件本身的互斥保护 std::atomic<T> 对单个原子状态进行读改写与同步 多对象事务或复杂容器保护 std::scoped_lock 一次获取多把锁,降低死锁风险 设计良好的锁层级 原子操作不一定是无锁(可用 is_lock_free() 查询),无锁也不等于无等待。不要仅因“可能更快”就把清晰的锁方案改为 CAS 循环。 互斥锁与 RAIIstd::mutex 的 lock()/unlock() 成功配对可建立同步关系。手写 unlock() 容易在提前返回或异常时遗漏,因此应让 RAII 对象持有锁。 12345678910111213141516...
线程管理
线程管理std::thread 表示一个执行线程的所有权对象。创建线程以后,必须在其析构前明确 join() 或 detach();否则程序调用 std::terminate()。C++20 的 std::jthread 通过析构自动请求停止并 join,通常更适合有作用域的工作线程。 创建与完成线程1234567891011#include <iostream>#include <thread>void print_task() { std::cout << "子线程正在工作\n";}int main() { std::thread worker(print_task); // 开始执行;实际何时获得 CPU 由调度器决定 worker.join(); // 阻塞当前线程,直到 worker 结束} join() 只能对可连接线程调用一次。它不仅等待线程结束,也让被连接线程结束前的操作在 join() 返回后对当前线程可见。 ...
并发基础概念
并发基础概念并发编程要解决的是:让多个任务在时间上重叠推进,同时仍能得到可预测、可维护的结果。它不等于“创建很多线程”;共享状态的所有权、同步方式和退出路径才是正确性的核心。 并发、并行与异步 概念 关注点 是否需要多核 例子 并发(concurrency) 多个任务在同一时间段内交替推进 不需要 单核上交替处理网络连接与日志写入 并行(parallelism) 多个任务在同一时刻真正执行 通常需要 多核同时计算不同数据块 异步(asynchrony) 发起操作后先做别的事,结果稍后取得 不需要 提交任务后通过 std::future 取得结果 异步是程序组织方式,并发和并行是任务的执行现象。一个异步任务可能延迟到调用 get() 时才在当前线程执行;一个多线程程序也可能因为锁竞争而几乎没有并行收益。详见异步机制。 123单核并发: AAAAA BBBBB AAAAA多核并行: 核心 1:AAAAA 核心 2:BBBBB 进程与线程进程通常是操作系统进行隔离和资源管理的单位;线程是进程内的执行单元。具体实现随操作系统而异,下面...
C++中常用头文件
C++ 标准库头文件手册本文档按功能分类整理 C++ 标准库头文件,涵盖 C++98 至 C++23 的主要特性。每个头文件简要说明其用途和常用组件,并标注引入版本(未标注则表示 C++98 已有)。 1. 语言支持 头文件 说明 常用组件 版本 <cstddef> 定义与内存相关的类型和宏 std::size_t, std::ptrdiff_t, NULL, offsetof <limits> 提供算术类型极限信息 std::numeric_limits <climits> C 风格整数类型极限宏 INT_MAX, CHAR_BIT 等 <cfloat> C 风格浮点类型极限宏 DBL_MIN, FLT_MAX 等 <cstdint> 定宽整数类型 int32_t, uint64_t 等 C++11 <cstdlib> 通用工具:内存管理、随机数、环境等 std::malloc, std::free, std::rand, std::exit <csetj...
Qt_认识Qt Creator
Qt Creator简介Qt Creator是一个全功能的集成开发环境,用于编码、调试、构建、测试、打包和部署 Qt 应用程序 Qt Creator界面Qt Creator 本身就是用 Qt 开发的 左侧是主工具栏,中间部分是工作区 主工具栏提供了项目文件编辑(Edit)、窗口界面设计 (Design)、程序调试(Debug)、项目设置(Project)等功能按钮 左侧主工具栏点击 Welcome 按钮后显示的界面。 工作区的左侧有 Projects、 Examples、Tutorials、Get Started Now 几个按钮,点击某个按钮后会在工作区显示相应的内容。 新建一个GUI项目点击 Qt Creator 的菜单项 File→New File or Project 在对话框左侧的列表框中点击 Application(Qt),中间的列 表框中会列出可以创建的项目类型。 Qt Widgets Application。基于界面组件的应用,也就是具有窗口的 GUI 程序,项目编程使用 C++语言。 此类项目称为 GUI 项目或应用项目。 Qt Console Appli...
Qt_环境搭建
MacOS下载Qt官网下载:https://www.qt.io/zh-cn/download-dev 选择社区版本 或者清华镜像:https://mirrors.tuna.tsinghua.edu.cn/qt/ 注册账户,根据安装提示进行安装 组件的选择: Qt Creator是Qt图形界面的开发工具
Connector/C++ Legacy API 使用手册
MySQL Connector/C++ 经典 JDBC/SQL 风格 API(Legacy API) 更接近传统数据库编程方式,核心接口风格和 JDBC 类似,主要通过: sql::Driver sql::Connection sql::Statement sql::PreparedStatement sql::ResultSet 来完成数据库访问。 说明:Connector/C++ 8.x 同时提供 X DevAPI 和传统 API。传统 API 常被称为 Legacy API 或 JDBC-like API。它走的是 经典 MySQL 协议,通常连接端口是 3306。 适用场景Legacy API 适合: 已有大量 SQL 代码 主要做传统关系型数据库开发 依赖 SELECT / INSERT / UPDATE / DELETE / JOIN / 存储过程 不需要 X Protocol / Collection 文档模型 如果你的项目是标准关系数据库开发,这套 API 往往更直观。 环境准备头文件常见包含方式: 1234...
Connector/C++ X DevAPI 使用手册
什么是 Connector/C++MySQL Connector/C++ 是 MySQL 官方提供的 C++ 客户端库。 它支持两套主要 API: X DevAPI 面向文档数据库和关系表操作的现代 API 基于 MySQL X Protocol 支持: Schema / Collection / Table 文档 CRUD SQL 执行 事务 预处理风格参数绑定 推荐用于 MySQL 8.x 和 X Plugin 环境 头文件常见: 1#include <mysqlx/xdevapi.h> 经典 JDBC/SQL 风格 API(Legacy API)更接近传统 SQL 驱动使用方式 安装 Connector/C++Linux以通过: 官方 MySQL 安装包 系统包管理器 手动下载安装 有时仓库包较旧: 12sudo apt updatesudo apt install libmysqlcppconn-dev 注意:有些发行版仓库里的版本可能不是最新的 8.x macOS如果 Homebr...
SQL语法基础
SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。本手册涵盖最常用的 SQL 语法,适用于 MySQL、PostgreSQL、SQLite、SQL Server 等主流数据库(部分语法可能略有差异,会特别注明)。 SQL 语句结构 SQL 语句以分号 ; 结尾。 关键字不区分大小写,但习惯大写。 标识符(表名、列名)在部分数据库中区分大小写(取决于配置)。 注释: 单行注释:-- 注释内容 或 # 注释内容(MySQL) 多行注释:/* 注释内容 */ 数据查询语言 (DQL) - SELECT用于从数据库中检索数据。 基本语法1234567SELECT [DISTINCT] 列1, 列2, ...FROM 表名[WHERE 条件][GROUP BY 列1, 列2, ...][HAVING 分组条件][ORDER BY 列1 [ASC|DESC], 列2 ...][LIMIT {行数 | 偏移量, 行数}]; 常用子句 SELECT:指定要查询的列,* 表示所有列,DISTINCT 去重。 FROM...
C++_chrono
<chrono> 是 C++ 标准库里专门处理时间、时长、计时器、时钟的库。它的设计目标是: 类型安全 精度清晰 避免直接用裸整数表示时间导致单位混乱 可以把它理解成两大核心概念: duration(时长):表示“多长时间”,比如 3 秒、500 毫秒 time_point(时间点):表示“某个时刻”,比如“从某个时钟起点开始经过了 10 秒的位置” 一、chrono 的核心组成1. duration:时间间隔std::chrono::duration 用来表示一段时间。 常见类型123456std::chrono::secondsstd::chrono::millisecondsstd::chrono::microsecondsstd::chrono::nanosecondsstd::chrono::minutesstd::chrono::hours 示例12345678910#include <iostream>#include <chrono>int main() { std::chrono::seconds ...





