我正在使用C++ 11上的線程庫來做一些事情。問題是我的線程數量有限(4)。幾個線程的多個任務
我會知道如何對付它:
#include <iostream>
#include <string>
#include <vector>
#include <thread>
#define NUMBER_OF_THREADS 4
void foo(const std::string& astring)
{
std::cout << astring << std::endl;
}
int main()
{
std::vector<std::string> list_of_strings(100);
// values assigned
std::vector<std::thread> list_of_threads(NUMBER_OF_THREADS);
for(std::vector<std::string>::const_iterator it_string = list_of_strings.begin() ; it_string != list_of_strings.end() ; ++it_string)
{
bool check = false;
unsigned int = 0;
while(!check) // loop which assigns the next task to the first thread ready.
{
if(check = list_of_threads.at(i).ISFREE()) // how to do ?
{
list_of_threads.at(i) = thread(&foo,*it_string);
}
else
{
i = (i + 1) % NUMBER_OF_THREADS;
}
}
}
for(std::vector<std::thread>::iterator it = list_of_threads.begin() ; it != list_of_threads.end() ; ++it)
it->join(); // the main thread is waiting for all threads before closing.
return 0;
}
但我不知道如何檢查,如果線程準備一個新的任務或沒有。任何想法 ?
德魯霍爾迄今爲止已是最好的答案。忘記使用一些令人討厭的(並且很可能是bug),「線程管理器循環」來顯式管理線程,並將任務排隊到池中。 –
@BradTilley:是的,我在我的代碼中使用它,我只是在我的問題中編寫了#define,因爲它更明顯:p – Alfred