#include <iostream>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <atomic>
#include <memory>
#include <functional>
#include <vector>
#include <algorithm>
#include <random>
#include <chrono>
#include <stdexcept> // 引入异常处理头文件
// 定义一个线程安全的队列
template <typename T>
class ThreadSafeQueue {
private:
std::queue<T> queue;
mutable std::mutex mtx;
std::condition_variable cv;
public:
ThreadSafeQueue() = default;
void push(T value) {
std::lock_guard<std::mutex> lock(mtx);
queue.push(std::move(value));
cv.notify_one();
}
T pop() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [this] { return !queue.empty(); });
T value = std::move(queue.front());
queue.pop();
return value;
}
bool empty() const {
std::lock_guard<std::mutex> lock(mtx);
return queue.empty();
}
};
// 定义一个递归函数来生成字符串
std::string generateString(int depth) {
if (depth == 0) {
return "Hello, World!";
} else {
std::string result = generateString(depth - 1);
std::reverse(result.begin(), result.end());
return result;
}
}
// 定义一个工作线程的函数
void worker(ThreadSafeQueue<std::function<void()>>& queue) {
while (true) {
try {
auto task = queue.pop();
task();
} catch (const std::exception& e) {
std::cerr << "捕获到异常: " << e.what() << std::endl;
// 模拟错误恢复
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
}
int main() {
// 初始化随机数种子
std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> dist(1, 10);
// 创建一个线程安全的队列
ThreadSafeQueue<std::function<void()>> taskQueue;
// 创建多个工作线程
std::vector<std::thread> threads;
for (int i = 0; i < std::thread::hardware_concurrency(); ++i) {
threads.emplace_back(worker, std::ref(taskQueue));
}
// 使用递归生成字符串
int depth = dist(rng); // 随机深度
std::string result = generateString(depth);
// 将输出任务放入队列
taskQueue.push([result]() {
std::cout << result << std::endl;
});
// 随机抛出错误的任务
taskQueue.push([]() {
std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> dist(1, 10);
if (dist(rng) > 5) { // 50%的概率抛出错误
throw std::runtime_error("故意抛出的异常");
}
});
// 等待一段时间,让任务完成
std::this_thread::sleep_for(std::chrono::seconds(2));
// 停止所有线程
for (auto& thread : threads) {
if (thread.joinable()) {
thread.detach();
}
}
return 0;
}
猜猜这个“复杂”的程序输出什么?
没错,这是一个Hello, World!
没想到吧(●'◡'●)
转载请注明出处,谢谢!