C++创建2个任务,任务1创建完成后挂起,任务2执行打印任务并计数,累计10次以后唤醒任务1,并挂起任务2;
时间: 2024-09-11 16:06:39 浏览: 13
在C++中创建和管理任务通常涉及到多线程编程。你可以使用标准库中的`<thread>`, `<mutex>`, `<condition_variable>`等来实现多线程之间的协作。以下是一个简单的示例,展示如何创建两个任务,其中一个完成后挂起,另一个执行打印任务并计数,累计10次后唤醒第一个任务,并挂起第二个任务。
首先,你需要包含必要的头文件:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
```
然后,创建互斥锁和条件变量用于线程间的同步:
```cpp
std::mutex mtx;
std::condition_variable cv;
bool task1_done = false;
int count = 0;
```
定义两个任务函数:
```cpp
void task1() {
// 模拟任务1的执行过程
std::this_thread::sleep_for(std::chrono::seconds(1)); // 假设任务1需要1秒钟来完成
{
std::unique_lock<std::mutex> lock(mtx);
task1_done = true; // 任务1完成
}
cv.notify_one(); // 通知任务2
}
void task2() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return task1_done; }); // 等待任务1完成
while (count < 10) {
std::cout << "打印任务执行,当前计数:" << count << std::endl;
count++;
cv.notify_one(); // 任务1醒来后,需要通知它等待
cv.wait(lock); // 任务2等待,直到任务1再次被挂起
}
cv.notify_one(); // 最后一次唤醒任务1
}
```
主函数中创建并启动这两个任务:
```cpp
int main() {
std::thread t1(task1);
std::thread t2(task2);
t2.join(); // 等待任务2结束
t1.join(); // 等待任务1结束
std::cout << "两个任务都已执行完毕。" << std::endl;
return 0;
}
```
这段代码展示了如何使用C++11的线程和同步工具来管理两个任务的协作。任务1执行完毕后挂起,任务2在任务1完成后开始执行,并且在打印10次后唤醒任务1并挂起自己。