下面的代碼應該工作在C++ 11並可以並行執行多個Worker::foo()
S:
#include <thread>
#include <memory>
#include <vector>
struct Worker
{
void foo();
};
int main()
{
std::vector<std::unique_ptr<Worker>> workers;
std::vector<std::thread> threads;
workers.reserve(N);
threads.reserve(N);
for (unsigned int i = 0; i != N; ++i)
{
workers.emplace_back(new Worker);
threads.emplace_back(&Worker::foo, workers.back().get());
}
// ... later ...
for (auto & t : threads) { t.join(); }
}
如果你信任你的元素你甚至可以做到沒有唯一指針引用保持有效:
std::deque<Worker> workers;
// ...
for (unsigned int i = 0; i != N; ++i)
{
workers.emplace_back(); // pray this doesn't invalidate
threads.emplace_back(&Worker::foo, std::ref(workers.back()));
}
什麼是「機器人」? –
@KerrekSB這是我創建對象的類。 – Jigglypuff
沒有開玩笑,但它怎麼定義* ?! –