现代C++之任务打包与多线程处理--使用std::packaged_task

本文介绍了如何使用C++的std::packaged_task实现任务的封装和多线程处理,以提高程序执行速度。通过创建任务类Task和任务管理类TaskManager,将任务按需分配给不同线程执行,实现实现了任务的多线程并行处理。实验结果显示,使用4个线程执行任务时,速度接近单线程的4倍。
摘要由CSDN通过智能技术生成

解决的问题:
多个互不相干的任务单线程处理较耗时,多线程将多任务均分后执行提高程序执行速度(类似线程池,本文更偏重于多任务的分配)。


任务封装

假设有任务类Task如下,每个任务初始化时传入要执行的参数,本例以传入n测试,任务执行结果以n*n表示,具体执行函数在exec()函数中执行,假设每个任务耗时100毫秒:

class Task
{
public:
    Task(int n)
        :m_id(n)
        , m_result(0)
    {}

    int getId() { return m_id; }
    int getResult() { return m_result; }
    // 任务执行
    void exec()
    {
        // 假设每个任务需要100毫秒
        this_thread::sleep_for(std::chrono::milliseconds(100));
        cout << m_id << " ";
        // 测试假设将n*n作为每个任务的执行结果
        m_result = m_id * m_id;
    }

private:
    int m_id;   // task id
    int m_result; // 任务执行结果
};

任务管理类

TaskManager是一个任务管理类,它负责执行自己手头上的任务,构造函数中传入vector<Task>作为它的任务集。
重载()执行手头上的所有任务,并将任务结果以std::map<int, in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值