C++ 多线程的基本使用, C++ 多线程配合原子操作的使用

发布时间:2025-04-28      访问量:39
C++ 多线程的基本使用
在 C++ 中,`<thread>` 头文件提供了多线程相关的类和函数,可用于创建和管理线程。下面是一个简单的示例,展示了如何创建和启动一个线程:
#include <iostream> #include <thread> // 线程函数 void threadFunction() { std::cout << "这是子线程在运行" << std::endl; } int main() { // 创建一个新线程并执行 threadFunction std::thread t(threadFunction); // 主线程输出信息 std::cout << "这是主线程在运行" << std::endl; // 等待子线程完成 t.join(); std::cout << "子线程已完成,主线程继续执行并结束" << std::endl; return 0; }

在上述代码中,`std::thread` 用于创建一个新线程,它接受一个可调用对象(如函数、lambda 表达式等)作为参数。`join` 方法用于等待子线程执行完毕,确保主线程在子线程结束后才继续执行。

C++ 多线程配合原子操作的使用
当多个线程同时访问和修改共享资源时,可能会出现数据竞争问题,导致程序出现不可预期的结果。原子操作可以确保对共享资源的访问是线程安全的。C++ 提供了 `<atomic>` 头文件来支持原子操作。下面是一个使用原子操作的示例:
#include <iostream> #include <thread> #include <atomic> #include <vector> // 原子计数器 std::atomic<int> counter(0); // 线程函数,对计数器进行递增操作 void incrementCounter() { for (int i = 0; i < 10000; ++i) { ++counter; } } int main() { // 创建多个线程 std::vector<std::thread> threads; for (int i = 0; i < 4; ++i) { threads.emplace_back(incrementCounter); } // 等待所有线程完成 for (auto& t : threads) { t.join(); } // 输出最终计数器的值 std::cout << "最终计数器的值: " << counter << std::endl; return 0; }

在上述代码中,`std::atomic<int>` 定义了一个原子整数类型的计数器 `counter`。多个线程可以同时对 `counter` 进行递增操作,由于使用了原子操作,不会出现数据竞争问题。最后,主线程等待所有子线程完成后,输出最终的计数器值。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念