mboost-dp1

.NET threading


Gå til bund
Gravatar #1 - Spiderboy
27. mar. 2012 18:54
Er der nogen, som kan uddybe følgende?
http://www.albahari.com/threading/part2.aspx skrev:
A thread-safe type does not necessarily make the program using it thread-safe.
Gravatar #2 - Brugernavn
27. mar. 2012 18:57
Hvis datatypen håndterer flere input "samtidigt", og sørger for at intet går tabt, er det ikke sikkert at det du putter i, ligger hvor du forventer, hvis du ikke selv er opmærksom på hvornår du putter hvad i den.
Gravatar #3 - arne_v
27. mar. 2012 19:16
#1

Der er en konvention om at hvis flere tråde kan kan lave enkelt kald til en instans af en klasse uden at data korrumperes eller der vises ikke konsistente data så kaldes den thread safe.

Men det betyder langtfra at applikationen er thread safe, da man ofte har brug for flere kald for at lave noget.

Lad os tage et eksempel.

Vi har en Account klasse med en get property/method og en set property/method for balance.

Hvis get og set laver en intern synkronisering så vil get altid returnere konsistente data og set vil aldrig korrumpere data.

Men et program som laver:

acc.Balance = acc.Balance + amt;

er ikke thread safe.

Hvis T1 og T2 begge skal tilføje 100 kr. til samme konto K der har X kroner ståender så kan der ske følgende:

T1 get returnerer X
T2 get returnerer X
T1 laver set med X+100
T2 laver set med X+100

Resultat: der står X+100 kroner men burde stå X+200 kroner.

Og så kan vi begynde at kigge på transaktioner som involverer mere end 1 konto !! :-)

Gravatar #4 - arne_v
27. mar. 2012 19:22
#3

Som en konsekvens af dette har man faktisk skiftet lidt fra thread safe klasser til ikke thread safe klasser gennem de sidste 15 år.

Eksempel i Java:

Vector & Hashtable -> ArrayList & HashMap
StringBuffer -> StringBuilder

Begrundelsen er at i praksis er den såkaldte thread safety sjældent nok og hvorfor betale overhead for synkronisering, hvis man alligevel i de fleste tilfælde alligevel selv skal synkronisere.


Gravatar #5 - Brugernavn
27. mar. 2012 19:35
arne_v (4) skrev:
Som en konsekvens af dette har man faktisk skiftet lidt fra thread safe klasser til ikke thread safe klasser gennem de sidste 15 år.

Det giver jo også især mening nu, hvor højniveausprogene har så nemme integrationer af monitoring. I hvert fald til de simplere ting.
Gravatar #6 - arne_v
27. mar. 2012 19:38
#5

Java synchronized og C# lock er lidt nemmere end pthreads ....
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login