#include <iostream>
#include <mutex>
#include <thread>
std::mutex mtx;
void print_block(int n, char c) {
// 创建 unique_lock 对象,自动锁定互斥锁
std::unique_lock<std::mutex> lck(mtx);
// 打印字符块
for (int i = 0; i < n; ++i) {
std::cout << c;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
std::cout << '\n';
// 离开作用域时,unique_lock 自动解锁互斥锁
}
int main() {
std::thread th1(print_block, 50, '*');
std::thread th2(print_block, 50, '$');
th1.join();
th2.join();
return 0;
}
std::mutex 和 std::unique_lock:
std::mutex 是一个互斥锁类,用于保护共享资源。std::unique_lock 是一个可移动的互斥锁管理器,它可以延迟锁定和解锁操作,并且可以在作用域结束时自动释放锁。print_block 函数:
n 表示要打印的字符数量,c 表示要打印的字符。std::unique_lock<std::mutex> 对象 lck,它会立即锁定 mtx 互斥锁。lck 对象离开其作用域,互斥锁会被自动解锁。线程创建与同步:
main 函数中,创建了两个线程 th1 和 th2,它们分别调用 print_block 函数来打印不同的字符。join 方法等待两个线程完成执行。通过这种方式,std::unique_lock 确保了对共享资源(如标准输出)的访问是线程安全的。
上一篇:c++ ceil函数
下一篇:c++中string
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站