Tja, ik heb sinds kort uitgevonden dat threads een zeer welkome optie zijn in het programmeren.
Nu zit ik mij af te vragen wat de juiste implementiatie zal zijn als je niet wilt dat de threads elkaar gaan 'bijten' dus dat ze informatie tegelijkertijd aanroepen en veranderen zonder dat de ander weet dat diegene er ook mee bezig is.
Je hebt natuurlijk het eerste programma wat gestart word... heel mooi, HoofdThread
Deze zal een sub thread ThreadC starten
Ook start HoofdThread sub thread ThreadG
Het blijft natuurlijk allemaal erg vaag als we gaan spreken over 'iets' dus neem ik ff als voorbeeld een simpele grafische engine:
HoofdThread handelt de invoer van de toetsenbord maar ook netwerk af, want de hoofdthread draait toch.
ThreadC draait de Collission van de objecten en onthoud waar objecten zijn
ThreadG draait het Grafische aspect en zorgt ervoor dat alle informatie uit ThreadC weergegeven word.
Nou, nu komen er dus al wat problemen om de hoek kijken. HoofdThread, ThreadC en ThreadG draaien tegelijkertijd. Als er informatie uitgewisselt gaat worden moet dat gebeuren op een manier dat als 2 threads besluiten exact op hetzelfde moment informatie op te zoeken van een andere thread ze niet elkaar bijten.
Nu had ik als oplossing bedacht dat elke thread passief is. Het enige wat men doet is een vraag (binnen eigen beheer van de thread) neer zetten, die andere threads dan uit kunnen lezen.
Dus als ThreadC besluit dat een object gerendert gaat worden, stopt hij in zijn eigen 'uitleeslijst' de informatie en zegt op het allerlaatst dat er nieuwe informatie is. ThreadG leest deze informatie uit.
Als reactie daarop zet ThreadG in een bepaalde gereserveerde ruimte binnen het gedeelte wat hij mocht uitlezen in de 'uitleeslijst' dat hij de informatie verwerkt heeft. ThreadC weet nu dat de informatie verwerkt is, en verwijdert deze item uit zijn verwerklijst.
Zo kunnen alle functies met elkaar communiceren... lijkt mij...
Of beredeneer ik hier iets verkeerd?
Allereerst is dit een oplossing die mij makkelijk lijkt om te zetten naar een werkelijk programma, terwijl ik zelf eigenlijk alles in de hand kan houden. Geen extra libary's er bij en niet veel gezeur er omheen. Gewoon een paar regels waar je als programmeur aan moet houden en daarna geen omkijken meer naar hebt.
Nu zit ik mij af te vragen wat de juiste implementiatie zal zijn als je niet wilt dat de threads elkaar gaan 'bijten' dus dat ze informatie tegelijkertijd aanroepen en veranderen zonder dat de ander weet dat diegene er ook mee bezig is.
Je hebt natuurlijk het eerste programma wat gestart word... heel mooi, HoofdThread
Deze zal een sub thread ThreadC starten
Ook start HoofdThread sub thread ThreadG
Het blijft natuurlijk allemaal erg vaag als we gaan spreken over 'iets' dus neem ik ff als voorbeeld een simpele grafische engine:
HoofdThread handelt de invoer van de toetsenbord maar ook netwerk af, want de hoofdthread draait toch.
ThreadC draait de Collission van de objecten en onthoud waar objecten zijn
ThreadG draait het Grafische aspect en zorgt ervoor dat alle informatie uit ThreadC weergegeven word.
Nou, nu komen er dus al wat problemen om de hoek kijken. HoofdThread, ThreadC en ThreadG draaien tegelijkertijd. Als er informatie uitgewisselt gaat worden moet dat gebeuren op een manier dat als 2 threads besluiten exact op hetzelfde moment informatie op te zoeken van een andere thread ze niet elkaar bijten.
Nu had ik als oplossing bedacht dat elke thread passief is. Het enige wat men doet is een vraag (binnen eigen beheer van de thread) neer zetten, die andere threads dan uit kunnen lezen.
Dus als ThreadC besluit dat een object gerendert gaat worden, stopt hij in zijn eigen 'uitleeslijst' de informatie en zegt op het allerlaatst dat er nieuwe informatie is. ThreadG leest deze informatie uit.
Als reactie daarop zet ThreadG in een bepaalde gereserveerde ruimte binnen het gedeelte wat hij mocht uitlezen in de 'uitleeslijst' dat hij de informatie verwerkt heeft. ThreadC weet nu dat de informatie verwerkt is, en verwijdert deze item uit zijn verwerklijst.
Zo kunnen alle functies met elkaar communiceren... lijkt mij...
Of beredeneer ik hier iets verkeerd?
Allereerst is dit een oplossing die mij makkelijk lijkt om te zetten naar een werkelijk programma, terwijl ik zelf eigenlijk alles in de hand kan houden. Geen extra libary's er bij en niet veel gezeur er omheen. Gewoon een paar regels waar je als programmeur aan moet houden en daarna geen omkijken meer naar hebt.