İlgili sorular :
C ++ 11 hakkında:
- C ++ 11: std :: iş parçacığı havuza alındı mı?
- C ++ 11'deki zaman uyumsuz (launch :: async), pahalı iş parçacığı oluşturmadan kaçınmak için iş parçacığı havuzlarını geçersiz kılacak mı?
Boost Hakkında:
- C ++ iş parçacığını yeniden kullanma iş parçacığı
- boost :: thread ve bunlardan bir havuz oluşturmak!
Nasıl alırım parçacığı havuzu için görevleri göndermek oluşturma ve bunları tekrar tekrar silmeden? Bu, kalıcı iş parçacıklarının katılmadan yeniden eşitlenmesi anlamına gelir.
Şuna benzeyen bir kodum var:
namespace {
std::vector<std::thread> workers;
int total = 4;
int arr[4] = {0};
void each_thread_does(int i) {
arr[i] += 2;
}
}
int main(int argc, char *argv[]) {
for (int i = 0; i < 8; ++i) { // for 8 iterations,
for (int j = 0; j < 4; ++j) {
workers.push_back(std::thread(each_thread_does, j));
}
for (std::thread &t: workers) {
if (t.joinable()) {
t.join();
}
}
arr[4] = std::min_element(arr, arr+4);
}
return 0;
}
Her yinelemeyi oluşturmak ve birleştirmek yerine, görevleri her yinelemede çalışan iş parçacıklarına göndermeyi ve yalnızca bir kez oluşturmayı tercih ederim.