将以上代码的低级锁替换为 高级锁
时间: 2024-05-14 18:18:35 浏览: 87
c代码-c高级测试
使用高级锁,可以使用 `std::lock_guard` 或 `std::unique_lock`。
以下是使用 `std::lock_guard` 的代码示例:
```c++
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 创建一个互斥锁
void print_block(int n, char c) {
// 创建 std::lock_guard
std::lock_guard<std::mutex> lck(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::unique_lock` 的代码示例:
```c++
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 创建一个互斥锁
void print_block(int n, char c) {
// 创建 std::unique_lock
std::unique_lock<std::mutex> lck(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::unique_lock` 可以更灵活地控制锁定和解锁,比如可以在不同的代码块中锁定和解锁。
阅读全文