User:Tom/Priemgetallen berekenen in C

From RoggeWiki
Jump to navigation Jump to search

Implementatie Multithreading

Het hoofdproces verdeelt het werk over de werkers. Het geven van werk is eenvoudig. Als een werker klaar is, krijgt deze een volgende serie priemgetallen aangereikt. Je kunt een buffer maken waarin de resultaten van de werkers tijdelijk opgeslagen worden. Door de buffer grotere te maken dan het aantal werkers, kun je de resultaten op volgorde wegschrijven. Naast de buffer kun je iedere hoeveelheid werk een volgnummer geven. Als een hoeveelheid werk is teruggegeven door de werker, kun je bepalen aan de hand van dit volgnummer of het werk toegevoegd kan worden aan het priemen bestand of dat dit werk nog even bewaard dient te worden.

Test eerst de werker door die aan te roepen en het resultaat te controleren.

Voetnoten

  • Het uitrekenen van een priemgetal, groot 12 cijfers, kost enkele milliseconden. Daarom is het efficienter om een werker niet 1 maar meerdere priemgetallen uit te laten rekenen.
  • Probleem is het toevoegen van de uitgerekende priemgetallen aan het priem bestand. De werkers hoeven niet op volgorde gereed te zijn met het berekenen van de toegewezen priemgetallen. Geef een volgnummer mee aan de workers. Bewaar bij gereedmelden worker het volgnummer en verwerk de priemgetallen als het ontvangen volgnummer 1 hoger is dan de vorige verwerkte. Houdt een buffer voor ontvangen resultaten bij. Roep de worker aan met een pointer naar de structure. Structure layout is dan volgnummer en array voor paar duizend priemen. Bij gereedmelden van de worker wordt dan de structure verwerkt en vrijgegeven. Control-C wordt opgevangen en er wordt gewacht totdat alle workers klaar zijn.
Batch = 1
Workers = 4
range = 1000
structure:
   long int volgnummer
   long int start_possible_prime
   long int array[Primes]
for all workers
    start worker #
while not control-c


start-worker:
  str

Zie ook Pthreads in C