读书人

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

发布时间: 2013-10-07 19:41:22 作者: rapoo

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

读书人网 >C++

热点推荐