#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!
没想到吧(●'◡'●)

转载请注明出处,谢谢!