#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
std::mutex mtx;
void print_block(int n, char c) {
// 互斥锁确保同一时间只有一个线程可以执行这块代码
std::lock_guard<std::mutex> lock(mtx);
for (int i = 0; i < n; ++i) {
std::cout << c;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
std::cout << '\n';
}
int main() {
// 使用 lambda 表达式作为线程函数
std::thread th1(print_block, 5, '*');
std::thread th2(print_block, 5, '$');
th1.join(); // 等待 th1 完成
th2.join(); // 等待 th2 完成
return 0;
}
<thread>
和 <mutex>
:引入了 C++11 的多线程库,使得我们可以使用 std::thread
来创建线程,并使用 std::mutex
来保证线程安全。std::lock_guard
:这是一个 RAII(Resource Acquisition Is Initialization)风格的锁管理器,它会在构造时自动加锁,在析构时自动解锁,确保即使在异常情况下也能正确释放锁。std::this_thread::sleep_for
:让当前线程休眠指定的时间,这里用于模拟一些耗时操作。th1.join()
和 th2.join()
:等待线程完成。如果不调用 join()
或 detach()
,主线程结束时会抛出异常。这个例子展示了如何使用 C++11 的多线程功能来创建和管理线程,并通过互斥锁确保线程安全。
上一篇:c++ mutable
下一篇:c++if语句
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站