CAS
CAS(Compare-And-Swap / Compare-And-Exchange,比较并交换)是并发编程中的一种原子操作,常用于实现无锁数据结构、原子计数器、自旋锁等。 在 C++ 中,CAS 主要通过 std::atomic 提供: 12std::atomic<T>::compare_exchange_weak(...)std::atomic<T>::compare_exchange_strong(...) CAS 的基本思想CAS 做的是: 如果当前值等于期望值,就把它改成新值;否则不修改,并返回失败。 可以用伪代码表示为: 123456789bool CAS(address, expected, desired) { if (*address == expected) { *address = desired; return true; } else { expected = *address; return false;...
线程管理
创建线程C++ 使用 std::thread 创建线程。 1234567891011121314#include <iostream>#include <thread>void task() { std::cout << "子线程执行" << std::endl;}int main() { std::thread t(task); t.join(); return 0;} joinjoin() 表示等待子线程执行结束。 12std::thread t(task);t.join(); 如果主线程不等待子线程,程序可能提前结束。 detachdetach() 表示让线程在后台独立运行。 1234567891011121314151617181920#include <iostream>#include <thread>#include <chrono>void task() { std::this_...
同步机制
同步机制用于协调多个线程堆共享资源的访问。 互斥锁mutexstd::mutex是C++中最基础的互斥锁,需要引入头文件<mutex>,它保证同一时刻只能有一个线程能够进入临界区。 示例: 12345678910111213141516171819202122232425#include <iostream>#include <thread>#include <mutex>int counter = 0;std::mutex mtx;void add() { for (int i = 0; i < 100000; ++i) { mtx.lock(); ++counter; mtx.unlock(); }}int main() { std::thread t1(add); std::thread t2(add); t1.join(); t2.join(); std::cout << c...
并发基础概念
并发与并行并发并发指的是多个任务同一时间段内交替执行。 例如: 123任务 A 执行一会儿切换到任务 B再切换回任务 A 在单核 CPU 上,也可以通过时间片轮转实现并发。 并行并行指的是多个任务同一时刻真正同时执行。 例如在多核 CPU 上: 12核心 1 执行任务 A核心 2 执行任务 B 进程与线程进程进程是操作系统资源分配的基本单位。 每个进程有独立的: 地址空间 文件描述符 堆空间 栈空间 全局变量 线程线程是CPU调度的基本单位。 同一个进程中的多个线程共享: 进程地址空间 全局变量 堆空间 文件描述符 每个线程独有: 线程栈 寄存器上下文 程序计数器 进程间通信(IPC)常用方式: 管道(pipe):pipe() 创建匿名管道,用于父子进程通信。 命名管道(FIFO):用于无亲缘关系进程。 信号(signal):异步通知,如 SIGTERM、SIGKILL。 共享内存(shm):最快的数据交换方式,需同步机制。 消息队列、信号量等。 多线程的优势多线程常用于: 提高 CPU 利用率 提升程序响应速度 处理 I/O 密集型任务 并行计算...
测试工具
✅ 完全匹配:C++开发者的“标配”工具这些工具是C++生态中原生或主流的,可以直接集成到C++项目的构建和测试流程中: 测试类型 推荐工具 为什么适合C++ 静态代码分析 SonarQube 原生支持C/C++(通过插件),能分析代码复杂度、潜在bug和安全漏洞。 Clang-Tidy 专为C/C++设计的现代化linter,由LLVM社区维护,支持C++11到C++20的现代语法检查。 Cppcheck 一个轻量级的、专门针对C/C++的静态分析工具,不依赖编译器,易于集成。 内存/资源检测 Valgrind Linux下C/C++程序内存调试的事实标准,尤其适合检测复杂的内存泄漏和非法访问。 AddressSanitizer (ASan) 由Google开发,已集成到GCC和Clang中,是C++开发者最常用的内存错误检测工具,速度快,适合CI。 代码覆盖率 gcov/lcov gcov是GCC自带的覆盖率工具,天然支持C/C++;lcov是其图形化前端。 单元测...
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...





