以下是一个结合现代C++特性与高效开发核心的多线程任务处理器示例。代码展示如何使用智能指针、lambda表达式和线程同步技术来实现安全高效的异步任务管理:

```cpp

#include

#include

#include

#include

#include

#include

#include

#include

#include

class ThreadSafeTaskProcessor {

public:

ThreadSafeTaskProcessor(size_t threadCount = std::thread::hardware_concurrency())

: running(true), workers(threadCount)

{

std::generate(workers.begin(), workers.end(), [this] {

return std::thread([this]() {

while (running.load()) {

std::function task;

{

std::unique_lock lock(queueMutex);

taskCond.wait(lock, [this]{ return !tasks.empty() || !running.load(); });

if (!running.load() && tasks.empty())

break;

task = std::move(tasks.front());

tasks.pop();

}

if (task)

task();

}

});

});

}

template

auto enqueueTask(F&& task) -> std::future {

using task_type = std::decay_t;

auto wrapped_task = std::make_shared>(std::forward(task));

auto futureResult = wrapped_task->get_future();

{

std::lock_guard lock(queueMutex);

tasks.emplace([wrapped_task]() { (wrapped_task)(); });

}

taskCond.notify_one();

return futureResult;

}

~ThreadSafeTaskProcessor() {

running = false;

taskCond.notify_all();

for (auto& w : workers) {

if (w.joinable())

w.join();

}

}

private:

std::vector workers;

std::queue> tasks;

std::atomic running;

mutable std::mutex queueMutex;

std::condition_variable taskCond;

};

```

### 核心技术创新解析:

1. 现代C++特性应用

- 智能指针管理:使用`std::shared_ptr`安全打包任务,避免内存泄漏

- 原子操作:`std::atomic`控制线程池执行状态,比传统互斥锁更高效

- Move语义:任务移动传输避免拷贝开销

- lambda表达式:简化线程处理逻辑,保持代码简洁

2. 高性能实现

- 自动线程数量配置:`std::thread::hardware_concurrency()`获取最佳线程数

- 锁竞争优化:仅在必要时加锁,使用`std::queue`和队列特性减少同步开支

- 惰性线程启动:按需创建/终止工作线程,降低资源争用

- 条件变量通知优化:只唤醒必要线程而非全部线程

3. 安全编程范式

- RAII模式:构造时立即创建线程,析构时自动清理资源

- 异常安全:所有资源管理均配置智能指针,确保异常时正确析构

- 数据隔离:任务参数完全封装在`std::function`中消除外部依赖

4. 可扩展实现

- 模板化任务支持:通过模板参数支持任意可调用类型

- 异步结果机制:支持通过`std::future`获取任务结果

- 冷热分离设计:关键执行路径无锁操作保障性能

- 线程池重用:所有线程持续运行直到对象生命周期结束,避免频繁创建/销毁

该实现结合了C++11/17的并发编程特性,在保持线程安全的同时,实现了高吞吐量的任务处理能力。特别适合需要大量异步计算而不能接受主线程阻塞的应用场景,如网络请求处理、实时数据计算等。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐