#include <iostream>
#include <mutex>
#include <thread>
std::mutex mtx; // 定义一个互斥锁
void print_block(int n, char c) {
// 使用 lock_guard 自动管理互斥锁的锁定和解锁
std::lock_guard<std::mutex> guard(mtx);
for (int i = 0; i < n; ++i) {
std::cout << c;
}
std::cout << '\n';
}
int main() {
std::thread th1(print_block, 50, '*');
std::thread th2(print_block, 50, '$');
th1.join();
th2.join();
return 0;
}
std::mutex mtx;
:定义了一个互斥锁对象 mtx
,用于保护共享资源。std::lock_guard<std::mutex> guard(mtx);
:使用 lock_guard
来自动管理互斥锁。当 lock_guard
对象创建时,它会自动锁定互斥锁;当 lock_guard
对象超出作用域时(即函数结束或块结束),它会自动解锁互斥锁。print_block
函数中,lock_guard
确保了在该函数执行期间,只有一个线程可以访问临界区(即输出字符的操作),从而避免了竞争条件。通过这种方式,lock_guard
提供了一种简单且安全的方式来管理互斥锁,防止忘记解锁导致的死锁问题。
上一篇:c++十进制转换为二进制代码
下一篇:c++ sin
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站