Что не так с этой многопоточной программой на C++? ⇐ C++
-
Гость
Что не так с этой многопоточной программой на C++?
Я пишу многопоточную программу на C++, используя std::thread, которая выглядит следующим образом:
#include #include #include #include использование пространства имен std; const int threadNum = 4; мьютекс мт[threadNum]; условие_переменная cv[threadNum]; поток threadList[threadNum]; bool threadWork[threadNum]; недействительная работа (int id) { в то время как (истина) { unique_lock lck(mt[id]); cv[id].wait(lck, [&]() { return threadWork[id]; }); // ждем входящих задач // сделай что-нибудь threadWork[id] = ложь; cv[id].notify_all(); } } интервал основной() { for (int я = 0; я < threadNum; я ++) { threadWork = ложь; threadList = поток (работа, я); } в то время как (истина) { for (int я = 0; я < threadNum; я ++) { // распределяем задачи по каждому потоку threadWork = правда; cv.notify_all(); } for (int я = 0; я < threadNum; я ++) { // ждем, пока все задачи закончатся unique_lock lck(mt); cv.wait(lck, [&]() { return !threadWork; }); cout
Я пишу многопоточную программу на C++, используя std::thread, которая выглядит следующим образом:
#include #include #include #include использование пространства имен std; const int threadNum = 4; мьютекс мт[threadNum]; условие_переменная cv[threadNum]; поток threadList[threadNum]; bool threadWork[threadNum]; недействительная работа (int id) { в то время как (истина) { unique_lock lck(mt[id]); cv[id].wait(lck, [&]() { return threadWork[id]; }); // ждем входящих задач // сделай что-нибудь threadWork[id] = ложь; cv[id].notify_all(); } } интервал основной() { for (int я = 0; я < threadNum; я ++) { threadWork = ложь; threadList = поток (работа, я); } в то время как (истина) { for (int я = 0; я < threadNum; я ++) { // распределяем задачи по каждому потоку threadWork = правда; cv.notify_all(); } for (int я = 0; я < threadNum; я ++) { // ждем, пока все задачи закончатся unique_lock lck(mt); cv.wait(lck, [&]() { return !threadWork; }); cout
Мобильная версия