我想做一个创建更多线程的for循环。
我试过了:
int i;
for (i = 0; i < 10; i++) {
thread t1(nThre);
t1.join();
cout << "Joined thread n'" << i << '\n';
}
但它不起作用。顺序调用nThre
(这是一个简单的void
例程)。
我还问我是否可以使用预增量,因为i
只是int
,所以:
++i
i++
--debug-brk
的{{1}},应该更高效。
答案 0 :(得分:6)
你的问题是你开始一个线程,并在开始下一个线程之前加入它。你应该这样做:
int i;
vector<thread> threads;
for (i = 0; i < 10; i++) {
threads.push_back(thread(nThre));
cout << "Started thread n'" << i << "\n";
}
for (i = 0; i < 10; i++) {
threads[i].join();
cout << "Joined thread n'" << i << "\n";
}
首先,你启动所有线程,然后等到它们完成。
对于i++
和++i
之间的差异,因为i
是一个整数,所以这里没有区别。有关详细信息,请参阅this answer。