multithread probleempje

Status
Niet open voor verdere reacties.

oechre

Gebruiker
Lid geworden
31 jan 2009
Berichten
7
het gaat om het 'beschermen' van een variabele.
Deze variabele is een array van vectoren van objecten.

Nu zijn er drie threads die de array doorlopen en de vectoren manipuleren.
Daar het nogal grote array's zijn en de het doorlopen niet synchroon gebeurd zou ik graag enkel de vector die door een thread gebruikt wordt willen afschermen.

Is dit mogelijk en zo ja kan je me in de juiste richting wijzen betreffende het hoe?


Dank bij voorbaat.
 
Code:
static int x;
int y = x

op deze manier lees je x door y heen, en kan je x nooit veranderen

Je kan ook een class gebruiken
 
Alvast bedankt voor je tijd.
Het is echter juist de bedoeling dat (in jouw voorbeeldje) de variabele x wordt veranderd.
misschien is het duidelijker met een beetje pseudo code:
[CPP]

class mijnclass

extern std::vector<mijnclass> mijnarray[MAX_LENGTE]; //de variabele

//de eerste thread is van de vorm
for (int i=0;i<MAX_LENGTE;i++)
{
for (int j=0;j<mijnarray.size();j++)
{
//vannales met de vector, deze zou ik dus graag 'beschermd' zien
}
}

//de tweede thread veranderd een vector in de array aan de hand van een timer en andere variabelen
//de derde thread behandeld gebruikersinput en past aan de hand daarvan één vector of meerdere vectoren aan.

[/CPP]
 
terwijl 1 thread door de vector loopt kan een andere thread een element van diezelfde vector verwijderen. Dit kan dan weer zeer vreemde resultaten opleveren. Ik wil die vector dus 'beschermen' (waarschijnlijk verkeerde woordkeuze) tegen het gelijktijdig aangepast worden door verschillende threads
 
je kan dan CreateThread() gebruiken en daar dan een van de loops in doe, en als die bezig is met SuspendThread() de andere op pauze zettenom vervolgens wer ResumeThread() als die klaar is
 
Goeiemorgen Scotty :)
Jou idee zou het gelijktijdig aanspreken zeker verhelpen maar ben je het voordeel van meerdere threads gebruiken niet kwijt wanneer je de andere steeds pauzeert?
 
Ben je op zoek naar een mutex lock? Waarschijnlijk bied je toolkit (windows library?) daar wel mogelijkheden voor.
 
Goeiemorgen Scotty :)
Jou idee zou het gelijktijdig aanspreken zeker verhelpen maar ben je het voordeel van meerdere threads gebruiken niet kwijt wanneer je de andere steeds pauzeert?

Ik dacht dat het juist de bedoeling was om eerst de een en dan de ander verder te laten gaan?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan