首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

急求C++11的std:thread库的用法,需求如次

2013-10-07 
急求C++11的std::thread库的用法,需求如下#include iostream#include threadusing namespace stdvoid

急求C++11的std::thread库的用法,需求如下


#include <iostream>
#include <thread>
using namespace std;

void foo(int i)
{
    cout<<"hello "<<i<<endl;
}

int main(int argc, const char * argv[])
{
    thread t[10];
    for(int i=0;i<10;i++)
        t[i]=thread(foo,i);
    for(int i=0;i<10;i++)
        t[i]=thread(foo,i);
    return 0;
}

需要多次创建和销毁线程,可以重复利用局部的thread数组吗?我试了下,不论是thread t[10]还是thread *t[10]再new都不行,thread库似乎会越界崩溃。 c++11 thread
[解决办法]
http://blog.csdn.net/tujiaw/article/details/8245130
参考下
[解决办法]
提到c++11的thread,有一本不可不读的好书
c++ concurrency in action
里面不但会教你multithread的原理,基础
讲解c++11的thread库中的各种设备该如何使用
还会告诉你如何创建thread pool
怎么设计concurrent code(concurrent的algorithms)
以及thread safe的data structure
无论是用来学习multithread的概念或是
学习c++11提供的thread库,都是一本不可多得的好书
[解决办法]
主楼代码根据标准要求,需要调用 terminate()。原因在于 thread 对象析构的时候还是 joinable 的状态,所以在析构之前必须调用 join 或 detach,像这样。

#include <algorithm>
#include <iostream>
#include <thread>
using namespace std;

void foo(int i)
{
    cout<<"hello "<<i<<endl;
}

int main ()
{
    thread t[10];
    for(int i=0;i<10;i++)
        t[i]=thread(foo,i);
    std::for_each(t,t+10,[](thread& t){t.join();});

    for(int i=0;i<10;i++)
        t[i]=thread(foo,i);
    std::for_each(t,t+10,[](thread& t){t.join();});
}

热点排行