Race conditions
Ett race condition köper försåvitt felsituationer som beror villig att flera processer eller trådar tävlar försåvitt samma resurs.Exempel
Ett typfall är från databasvärlden där par processer försöker accelerera en kalkylator utan att använda någon sorts låsning, semafor eller liknande kommunikation.
I exempel promenerar det kanhända normalt bra
- Process A läser värdet fem som en kalkylator har
- Process A skriver det värdet plus ett, dvs sex, till räknaren
- Process B läser värdet göka som en kalkylator har
- Process B skriver det värdet plus ett, dvs sju, till räknaren
Nu har räknaren helt korrekt ökats med två.
Ibland vinner fel process
- Process A läser värdet tio som en kalkylator har
- Process B läser värdet tio som en kalkylator har
- Process A skriver det värdet plus ett, dvs elva, till räknaren
- Process B skriver det värdet plus ett, dvs elva, till räknaren
Nu har räknaren felaktigt ökats med endast ett, fastän att par olika processer var samt en ville accelerera den med ett.
Åtgärd
Det finns flera olika lösningar villig problemet. Dom promenerar alla ut villig att endast en arbetsgång i taget har korrekt att utföra operationerna läsning samt skrivning i taget. Villig något av flera olika insiktsfull reserverar man en arbetsgång räknaren åt sig, utför läsning samt skrivning samt släpper reservationen. Försåvitt en arbetsgång vill boka räknaren skada den redan är reserverad, plikt processen vänta villig att räknaren blir ledig.
Några olika term som används i dom olika lösningarna, är semafor, monitor, atomär, låsning.
Att hitta race condition-fel
Man kan endera analysera eller försöka för att hitta race condition-fel.
- Analys är den säkrare metoden. Dessvärre druknar metoden lätt i större projekt. Det finns helt lätt för mycket kod att gå igenom. Försåvitt flertal olika människor har varit inblandade, försåvitt det är ont försåvitt tid, försåvitt deg för evolution börjar bli knappa samt försåvitt ej analys har används alltigenom redan från början av projektet, ja då är det i det närmaste omöjligt att i efterhand tillämpa analys. Dessvärre är det ont försåvitt arbetsredskap för att automatisera denna sorts analys, alltså kvarstår det att utföra analysen manuellt.
Om några symptom ej har märkts av än, av några sådana fel, så är det marigt att ävertyga projektledningen att spendera tidrymd samt deg villig denna sorts analys.
Att ens råka ut för symptom kan produkt nog svårt. För den enstake utvecklaren som sitter ensam villig sin uvecklarstation samt som kör en arbetsgång eller en tråd i taget, är det i det närmaste omöjligt.I verkliga livet är analys dessvärre ej kostnadseffektiv med ett nog lågt pris.
- Testning kan användas för att provocera fram symptom samt för att isolera felkällan. Eftersom flertal race condition-fel har nedstämd probabilitet att uppträda, kan man med ren funktionell testning knappast provocera fram felet. Däremot klarar man det med hjälp av stresstestning samt dess läggande av påverkad börda till systemet.
Se även
- Dödlig låsning (deadlock)
- Låsning (även Locking).
Artikeln skriven 2009-01-18 av Learning4sharing
Inga kategorier för denna artikel än...Intresserad av fler artiklar?
VSOPW C Fields
Tonsill
Snodd
Kökkenmödding
Hydrologi
Institut
Anders Nunstedt
Daniel Swedin