User:Tom/Priemgetallen berekenen in C: Difference between revisions
< User:Tom
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| (6 intermediate revisions by 2 users not shown) | |||
| Line 5: | Line 5: | ||
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. | 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]] | |||
Latest revision as of 08:20, 11 September 2019
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