c ++ - Multi threading uafhængige opgaver

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har N opgaver, som er uafhængige (dvs. skrive på forskellige hukommelsesadresser), men tag ikke på samme tid for at fuldføre (fra 2 til 10 sekunder.) Jeg har P-tråde.


Jeg kan opdele mine N opgaver i P-tråde og lancere mine tråde. I sidste ende vil der i slutningen være en enkelt tråd tilbage til at fuldføre de sidste få opgaver, hvilket ikke er optimalt.


Jeg kan også starte P-tråde med 1 opgave hver, WaitForMultipleObjects, og genstart P tråde osv. (Det er det jeg gør i øjeblikket, da overhead til oprettelse af tråde er lille i forhold til opgaven). Dette løser dog ikke problemet enten vil der stadig være P-1 tråde venter på den sidste på et tidspunkt.


Er der mulighed for at starte tråde, og så snart tråden har afsluttet sin opgave, fortsæt til næste ledige opgave, indtil alle opgaver er afsluttet?


Tak!

Bedste reference


ja, det hedder thread pooling. Det er en meget almindelig praksis.


http://en.wikipedia.org/wiki/Thread\_pool\_pattern[2]


I grund og grund opretter du en kø af opgaver (funktionspegere med deres argumenter), og skubber opgaverne der. Du har N tråde, der kører, som gør følgende sløjfe (skematisk kode):


while (bRunning) {
   task = m\_pQueue.pop();
   if (task) {
      executeTask(task);
   }
   else {
    //you can sleep a bit here if you want
   } 
}


der er mere elegante måder at implementere det på (undgå sovende osv.), men dette er kernen i det.