zoukankan      html  css  js  c++  java
  • C++14中与OMP配合实现简易线程池

    OpenMP + C++ functional 可以瞬间构造一个线程池

    #include <iostream>
    #include <functional>
    #include <vector>
    using namespace std;
    
    void fun (int a, int b)
    {
        cout<< "fun exec :"<< a << '+' << b << '=' << a + b <<endl;
    }
    
    class C{
    private:
        float m_c = 2.0f;
    public:
        void mp( float d)
        {
            cout<<"c::mp exec :"<< m_c << 'x' << d << '=' << m_c * d <<endl;
        }
    };
    
    int main(int argc, char * argv[])
    {
        const int task_groups = 5;
        C c [task_groups]; 
        vector<function<void (void) > > tasks;
        for (int i=0;i<task_groups;++i)
        {
            tasks.push_back(bind( fun , 10, i * 10 ) );
            tasks.push_back(bind( &C::mp , &c[i], i*2.0f ) );
            tasks.push_back(bind(
                [=] (void) {cout << "lambada :" <<i << endl;    }
                ) );
        }
        size_t sz = tasks.size();
    #pragma  omp parallel for
        for (size_t i=0;i<sz;++i)
        {
            tasks[i]();
        }
        return 0;
    }
    
    

    output:

    fun exec :10+0=10
    c::mp exec :2x0=0
    lambada :0
    fun exec :10+10=20
    c::mp exec :2x2=4
    lambada :1
    fun exec :10+20=30
    c::mp exec :2x4=8
    lambada :2
    fun exec :10+30=40
    c::mp exec :2x6=12
    lambada :3
    fun exec :10+40=50
    c::mp exec :2x8=16
    lambada :4
    
  • 相关阅读:
    个人项目(Word Count Java)
    自我介绍+软工5问
    第六次实践
    第五次实践作业
    第四次实践作业
    第三次实践作业
    第二次实践作业
    第1次实践作业
    第06组 Beta版本演示
    第06组 Beta冲刺(4/4)
  • 原文地址:https://www.cnblogs.com/DWVictor/p/15212042.html
Copyright © 2011-2022 走看看