给我一道c加加线程的题目
时间: 2025-01-01 16:39:06 浏览: 8
在C++中,涉及线程编程的经典题目通常会考察创建线程、同步机制、互斥锁、条件变量等知识点。下面是一个简单的例子题目:
**题目描述**:
编写一个程序,该程序包含两个线程。一个线程负责打印从0到9的数字,另一个线程负责打印字符 'A' 到 'J'。每个线程在打印完自身范围内的内容后,需要等待一段时间再继续下一轮循环。你需要使用互斥锁和条件变量保证打印顺序正确,并防止竞争条件。
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool isdigit = true, isalpha = false;
void print_digits() {
for (int i = 0; i <= 9; ++i) {
std::lock_guard<std::mutex> lock(mtx);
if (isdigit) {
std::cout << i << " ";
isdigit = false;
cv.notify_one(); // 线程切换信号
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
void print_letters() {
for (char c = 'A'; c <= 'J'; ++c) {
std::lock_guard<std::mutex> lock(mtx);
if (isalpha) {
std::cout << c << " ";
isalpha = false;
cv.notify_one();
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main() {
std::thread t1(print_digits), t2(print_letters);
// 等待所有线程结束
t1.join();
t2.join();
return 0;
}
```
**相关问题--**:
1. 这道题目的目的是什么?
2. `std::condition_variable`在这里的作用是什么?
3. 如果我们想让线程交替打印,应该如何修改代码?
阅读全文