并发编程: c++11 thread(Func, Args...)利用类成员函数创建线程

c++11是VS2012后支持的新标准,为并发编程提供了方便的std::thread。

使用示例:

#include <thread>

void thread_func(int arg1, int arg2, float* arg3){
    arg3 = (arg1*1.0)/(arg1 + arg2);
    cout << "arg1 / (arg1 + arg2) = " << arg3 << endl;
    return;
}

void main(){
    //线程数
    int threadNum = 3

    //动态分配
    thread* t;
    t = new thread[threadNum];

    //结果
    float *result =  (float *)malloc(threadNum*sizeof(float));
    
    for ( int i = 0; i < threadNum; i++){
        t[i] = thread(thread_func, i, i, &result[i]);    
    }

    for ( int i = 0; i < threadNum; i++){
        //t[i].detach(); //主进程不等子进程运行完
        t[i].join();        //主进程等
    }

    //post-processing towards result...
}

当需要利用类成员函数( MyClass::thread_func )来创建子线程时,需如下码码:

t[i] = thread(std::mem_fn(&MyClass::thread_func), Object, args..);    

如果thread_func为static,则不用写object。否则需要,如主进程所调函数也为该类成员,则传入this指回自己。

原文地址:https://www.cnblogs.com/rangozhang/p/4468754.html