Start Logga In Skriv Artikel Om Oss
Vad söker du?
Allt om 'Race conditions'

Race conditions

Ett race condition handlar om felsituationer som beror på att flera processer eller trådar tävlar om samma resurs.

Exempel

Ett typfall är från databasvärlden där två processer försöker öka en räknare utan att använda någon sorts låsning, semafor eller liknande kommunikation.

I exempel går det kanske normalt bra

  • Process A läser värdet fem som en räknare har
  • Process A skriver det värdet plus ett, dvs sex, till räknaren
  • Process B läser värdet sex som en räknare 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 räknare har
  • Process B läser värdet tio som en räknare 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, trots att två olika processer var och en ville öka den med ett.

Åtgärd

Det finns flera olika lösningar på problemet. De går alla ut på att endast en process i taget har rätt att utföra operationerna läsning och skrivning i taget. På något av flera olika vis reserverar man en process räknaren åt sig, utför läsning och skrivning samt släpper reservationen. Om en process vill reservera räknaren men den redan är reserverad, måste processen vänta på att räknaren blir ledig.

Några olika begrepp som används i de olika lösningarna, är semafor, monitor, atomär, låsning.

Att hitta race condition-fel

Man kan endera analysera eller testa för att hitta race condition-fel.

  • Analys är den säkrare metoden. Tyvärr druknar metoden lätt i större projekt. Det finns helt enkelt för mycket kod att gå igenom. Om många olika personer har varit inblandade, om det är ont om tid, om pengar för utveckling börjar bli knappa och om inte analys har används genomgående redan från början av projektet, ja då är det i det närmaste omöjligt att i efterhand tillämpa analys. Tyvärr är det ont om verktyg för att automatisera denna sorts analys, alltså kvarstår det att utföra analysen manuellt.

Om några symptom inte har märkts av än, av några sådana fel, så är det svårt att ävertyga projektledningen att spendera tid och pengar på denna sorts analys.

Att ens råka ut för symptom kan vara nog svårt. För den enstake utvecklaren som sitter ensam på sin uvecklarstation och som kör en process eller en tråd i taget, är det i det närmaste omöjligt.I verkliga livet är analys tyvärr inte kostnadseffektiv med ett tillräckligt lågt pris.

  • Testning kan användas för att provocera fram symptom och för att isolera felkällan. Eftersom många race condition-fel har låg sannolikhet att uppträda, kan man med ren funktionell testning knappast provocera fram felet. Däremot klarar man det med hjälp av stresstestning och dess läggande av hög last mot systemet.
Med många anrop fås många försök att provocera fram felet. Även om varje försök har en tusendels chans att få konkurrerande processer att utföras i fel ordning (se exemplet ovan), så är sannolikheten till minst en sådan instans väldigt hög efter flera tusen eller miljoner anrop.

Se även

  • Dödlig låsning (deadlock)
  • Låsning (även Locking).

Redigera?

Artikeln skriven 2009-01-18 av Learning4sharing

Inga kategorier för denna artikel än...

Vi behhöver hjälp att kategorisera våra artiklar. Kan du skriva ett nyckelord för denna artikel? Du kan skriva upp till 3 olika nyckelord för denna artikel, vi uppskattar din hjälp!

Skriv nyckelord som du tycker beskriver denna artikel på ett bra sätt. Du kan ange 3 olika nyckelord för denna artikel, max 20 tecken per nyckelord.

  1. Lägg till fler
    Skriv in svaret på frågan: 5+2

Intresserad av fler artiklar?

VSOP
W C Fields
Tonsill
Snodd
Kökkenmödding
Hydrologi
Institut
Anders Nunstedt
Daniel Swedin

Senaste sökningarna

sven wingquist har fått 1477 sökningar. Den senaste gjordes 2024-04-18 19:40:59.

generator har fått 1451 sökningar. Den senaste gjordes 2024-04-18 19:40:32.

pugh har fått 1387 sökningar. Den senaste gjordes 2024-04-18 19:39:40.

Links har fått 1193 sökningar. Den senaste gjordes 2024-04-18 19:39:28.

Peder Pedersson Ribbing har fått 1268 sökningar. Den senaste gjordes 2024-04-18 19:39:01.

Luthersk har fått 1401 sökningar. Den senaste gjordes 2024-04-18 19:38:00.

beskow har fått 1520 sökningar. Den senaste gjordes 2024-04-18 19:37:47.

c har fått 1997 sökningar. Den senaste gjordes 2024-04-18 19:36:54.

ATP har fått 1535 sökningar. Den senaste gjordes 2024-04-18 19:35:57.

lateral har fått 1375 sökningar. Den senaste gjordes 2024-04-18 19:35:12.

examensarbete har fått 1168 sökningar. Den senaste gjordes 2024-04-18 19:34:56.

bräda har fått 1092 sökningar. Den senaste gjordes 2024-04-18 19:34:01.

Designed by: template world
Learning4sharing.nu
All Rights Reserved. 0.07 SEK

Logga in

Välkommen att redigera och skriva nya artiklar!

Ingent Konto?

Skaffa konto för att redigera och skapa nya ariklar Nytt Konto.

Ny Användare

Välkommen att redigera och skriva nya artiklar! Skapa konto nedan.


Ett verifieringsmail kommer att skickas till din E-post som du måste öppna och verifiera din E-post med

Lägg till artikel

Du är inte inloggad.

Logga In eller Skapa konto.