创建线程,在循环中为其分配函数并执行

时间:2011-12-08 10:00:29

标签: c++ multithreading boost

我有一些工作需要在不同的线程中完成,工作是在std::vector<T>个对象上完成的。

我需要完成工作,然后在主线程中等待join()的所有线程。

我已经通过以下方式完成了这项工作,但我认为这不是一个好主意,因为我只有一个指针,它指向循环的每次迭代的其他内容。

struct properties 
{
    explicit properties(someobj obj) : obj_(obj) {}
    void operator()() { /*do something*/ } 
    someobj obj_;
};

boost::shared_ptr<boost::thread> t;
for (size_t tst = 0; tst <= myvector.size() - 1; ++tst) 
{ 
    properties props(myvector[tst]);
    t = boost::shared_ptr<boost::thread>(new boost::thread(props));

} 

//get main thread to wait till all t's are done, however is this a smart way to wait on multiple t's?? Which t is it going to wait on?
t->join();

有人可以提出更好的方法吗?我应该制作一个vector<boost::shared_ptr<boost::thread>>并循环浏览它们并通过我的对象向量吗?

1 个答案:

答案 0 :(得分:3)

您需要使用线程池。 Boost可能提供一个,但我不认为它。 PPL和TBB在parallel_for_each函数中提供它们。

松散地,Boost提供的thread_group课程应该是您所需要的。

从根本上说,boost::thread是OS线程的包装器,它并不是一个真正的线程基础。 PPL和TBB提供并行算法和数据结构,这要好得多。