mboost-dp1
.NET threading
- Forside
- ⟨
- Forum
- ⟨
- Programmering
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.
#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 !! :-)
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 !! :-)
#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.
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.
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.