Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建线程,在循环中为其分配函数并执行_C++_Multithreading_Boost - Fatal编程技术网

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

C++ 创建线程,在循环中为其分配函数并执行,c++,multithreading,boost,C++,Multithreading,Boost,我有一些工作需要在单独的线程中完成,这些工作是在对象的std::vector上完成的 我需要完成这项工作,然后在主线程中,使用join()等待所有线程 我用下面的方法完成了这项工作,但我认为这不是一个好主意,因为我只有一个指针,它在循环的每次迭代中都指向其他的东西 struct properties { explicit properties(someobj obj) : obj_(obj) {} void operator()() { /*do something*/ }

我有一些工作需要在单独的线程中完成,这些工作是在对象的
std::vector
上完成的

我需要完成这项工作,然后在主线程中,使用
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();
struct属性
{
显式属性(someobj-obj):objuj(obj){}
void运算符()({/*执行操作*/}
某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某;
};
boost::共享\u ptr t;
对于(size_t tst=0;tst join();

有人能提出更好的方法吗?我应该创建一个
向量
并通过它们和我的对象向量进行循环吗?

你需要使用一个线程池。Boost可能会提供一个线程池,但我认为它不会。PPL和TBB在它们的
并行中为每个
函数提供线程池

粗略地说,Boost提供的
thread\u组
类应该是您所需要的


基本上,
boost::thread
是操作系统线程上的一个包装器,它并不是一个坚实的线程基础。PPL和TBB提供了并行算法和数据结构,这比使用它们要好得多。

您需要使用线程池。boost可能会提供一个线程池,尽管我认为它不会。PPL和TBB在它们的
并行中为您提供线程池_每个
都起作用

粗略地说,Boost提供的
thread\u组
类应该是您所需要的


基本上,
boost::thread
是操作系统线程上的一个包装器,它并不是一个真正可靠的线程基础。PPL和TBB提供了并行算法和数据结构,这更好。

使用C++11,您可能还希望了解其中的并发性内容。