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

急求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.****.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();});
}