별도의 스레드에서 수행해야하는 작업이 있습니다. 작업은 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>>
을 만들어 루프를 통과하고 내 개체 벡터를 통과해야합니까?
이 두 번째입니다. C++ 11을 사용할 수 있다면 거기에있는 동시성에 대해 살펴볼 수도 있습니다. – LiMuBei