#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 定义一个互斥锁
void print_block(int n, char c) {
// 尝试锁定互斥锁,确保同一时间只有一个线程可以执行这个代码块
mtx.lock();
for (int i = 0; i < n; ++i) {
std::cout << c;
}
std::cout << '\n';
// 解锁互斥锁
mtx.unlock();
}
void print_block_with_lock_guard(int n, char c) {
// 使用lock_guard自动管理互斥锁的锁定和解锁
std::lock_guard<std::mutex> lock(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();
std::thread th3(print_block_with_lock_guard, 50, '#');
std::thread th4(print_block_with_lock_guard, 50, '@');
th3.join();
th4.join();
return 0;
}
std::mutex
: 用于保护共享资源,防止多个线程同时访问导致数据竞争。mtx.lock()
和 mtx.unlock()
: 手动锁定和解锁互斥锁。在这段代码中,print_block
函数使用了手动锁定和解锁的方式。std::lock_guard<std::mutex>
: 是一个作用域锁,它在构造时自动锁定互斥锁,在析构时自动解锁。这种方式更安全,避免了忘记解锁的问题。print_block_with_lock_guard
函数展示了如何使用 std::lock_guard
。std::thread
创建了多个线程来并发执行 print_block
和 print_block_with_lock_guard
函数。这段代码演示了如何使用 C++ 中的互斥锁 (std::mutex
) 来确保线程安全地访问共享资源。
上一篇:c++ 多态
下一篇:c++向下取整函数
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站