Se om en tråd kører i forvejen

Tags:    .net

Halløj. Jeg sidder med et lille problem, og håber der er nogle kloge hoveder herinde der kan hjælpe mig :)

Hvis jeg har oprettet en tråd, og har sat den i gang, er der så nogen måde hvorpå jeg kan tjekke om den kører?

Problemet er at tråden bliver oprettet hver gang der kommer en pakke data til programmet. Tråden står så for at behandle de indkommende data. Hvis der allerede behandles data, skal de nyligt indkomne data bare ignoreres.

Jeg har altså brug for at tjekke om tråden kører allerede, i en atomisk operation, så der ikke opstår race conditions.

jeg kan ikke bruge en lock{} da det vil blokere, og skabe et context switch. Der skal bare tjekkes om tråden kører og så fortsætte hvis den gør.

Er det noget der kan lade sig gøre, eller har jeg brug for at omdesigne?

Jeg tænker nemlig at det kan skabe lidt problemer hvis der kommer data ind hurtigere end programmet kan nå at behandle dem. Hvis der bliver oprettet tråde i vildskab, vil der ikke være mere hukommelse tilbage på et tidspunkt.



Hvorfor laver du en tråd hver gang der kommer en pakke? Hvorfor ikke bare behandle den og så vente på ny pakke? Hvis det fordi du har noget andet kørende samtidig, så i stedet for at lave tråd for hver pakke så lav en tråd så du har den "orginale" tråd, og den nye tråd som har det ene formål at tage sig af pakkerne.

Jeg er temmelig sikker på at det ikke hjælper noget at lave flere tråde hvis man vil være sikker på at modtage alle data. Tværtimod så tror jeg den overhead der kommer ved en tråd giver den modsatte effekt. Hvis der kommer for meget data der ikke kan nå at behandles er der nok ikke andet for end at springe noget af det over.



Indlæg senest redigeret d. 05.08.2009 16:01 af Bruger #14645
t