Windows - C ++ Multi-Thread Execution Speed ​​Slow-Down

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver en multi-threaded c ++ applikation. Når tråd A har en meget computationally dyr operation til at udføre, sænker den tråde B, C og D. Hvordan kan jeg forhindre dette?

Bedste reference


På vinduer kan du bruge Sleep(0) for at frigive resten af ​​din timeslice for andre tråde, der venter.

Andre referencer 1


Svært at fortælle uden at se kode, så jeg kan kun give dig råd til at sænke trådens prioritet. Dette kan gøres ved hjælp af SetThreadPriority-funktionen. [8]

Andre referencer 2


Bemærk, at du kan indstille trådprioriteterne (SetThreadPriority) [9]


Jeg rådgiver også, at baggrundsarbejderen vælger sit arbejde fra en kø, og køen kan så bruges som en måde at sprede beregningerne på:



  • Du kan konfigurere, hvor mange 'opgaver' der tages fra køen til behandling i et sving

  • Du kan låse køen (brug semaforer + betingelsesbegivenhed), så du midlertidigt kan forhindre, at nye opgaver hentes.

  • Nu kan du distribuere belastningen på tværs af flere arbejdere (sige, at tråd B, C, D er midlertidigt i tomgang, de kan begynde at løfte arbejdet fra tråd A; meget nyttigt på en Quad-core + desktop)



$ 0.02

Andre referencer 3


Der er et par måder:



  • Som RedX foreslog, tilføj Sleep(0) i tråd A's indre loop for at få det til at give tid oftere. Dette er den billige og dovne løsning.

  • Det ville være bedre at ændre trådprioriteten. Når du ringer CreateThread, send CREATE\_SUSPENDED, så tråden ikke starter straks. Ring derefter SetPriorityClass for at indstille tråden til en lavere prioritet efterfulgt af ResumeThread.


Andre referencer 4


Du vil måske også gerne se på, at din computerkoblede tråd giver processoren til andre tråde. Se dette indlæg for forskellige måder at gøre dette på.