روش صحیح استفاده از std::condition_variable هستش برای اینکار در انتهای تابع فوق از متد wait این کلاس استفاده کنید تا زمانی شرط خاتمه برقرار باشه مثلا بعدی از فراخوانی method1 یه شمارنده را افزایش بدید که در مثال بالا از شمارنه به 8 رسید یعنی همان شرط خاتمه .
class A {
int method1() {
//myhuge process here
}
void run() {
std::mutex mtx;
std::condition_variable cv;
std::atomic<int> counter = 0;
std::vector<int> res(8);
ThreadPool thread_pool(8);
for (int i = 0; i < 8; i++) {
thread_pool.enqueue([this,&counter,&cv]() {
method1();
counter++;
cv.notify_one();
});
}
{
std::unique_lock<std::mutex> lck;
cv.wait(lck, [&counter] {return counter >= 8; });
}
}
};