#include <iostream>
#include <thread>
#include <vector>
#include <algorithm>
void f(int n) {
for (int i = 0; i < 10; ++i) {
std::cout << "Message from thread #" << n << ": iteration #" << i << "\n";
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
}
int main() {
std::cout << "Main thread: build threads pool\n";
std::vector<std::thread> pool;
pool.push_back(std::thread{f, 1});
pool.push_back(std::thread{f, 2});
pool.push_back(std::thread{f, 3});
std::for_each(pool.begin(), pool.end(), std::mem_fn(&std::thread::join));
std::cout << "Main thread: all threads finished.\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdm9pZCBmKGludCBuKSB7Cglmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKCQlzdGQ6OmNvdXQgPDwgIk1lc3NhZ2UgZnJvbSB0aHJlYWQgIyIgPDwgbiA8PCAiOiBpdGVyYXRpb24gIyIgPDwgaSA8PCAiXG4iOwoJCXN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIwMCkpOwoJfQp9CgppbnQgbWFpbigpIHsKCXN0ZDo6Y291dCA8PCAiTWFpbiB0aHJlYWQ6IGJ1aWxkIHRocmVhZHMgcG9vbFxuIjsKCXN0ZDo6dmVjdG9yPHN0ZDo6dGhyZWFkPiBwb29sOwoJcG9vbC5wdXNoX2JhY2soc3RkOjp0aHJlYWR7ZiwgMX0pOwoJcG9vbC5wdXNoX2JhY2soc3RkOjp0aHJlYWR7ZiwgMn0pOwoJcG9vbC5wdXNoX2JhY2soc3RkOjp0aHJlYWR7ZiwgM30pOwoJc3RkOjpmb3JfZWFjaChwb29sLmJlZ2luKCksIHBvb2wuZW5kKCksIHN0ZDo6bWVtX2ZuKCZzdGQ6OnRocmVhZDo6am9pbikpOwoJc3RkOjpjb3V0IDw8ICJNYWluIHRocmVhZDogYWxsIHRocmVhZHMgZmluaXNoZWQuXG4iOwp9