Vad är ett tävlingsvillkor?

0
142
Juice Dash/Shutterstock.com

Har du någonsin kört ett lopp? Om så är fallet, vet du redan att en fotobearbetning ibland krävs för att välja vinnaren! Men tänk om två personer anlände samtidigt till mållinjen? Välkommen till tävlingsförhållanden.

Vad är datortrådar ?

För att förklara ett tävlingsvillkor, vi måste först förstå lite om hur datorer fungerar internt. När du använder ett operativsystem kommer du att vidta olika åtgärder som att öppna ett kommandoterminalfönster, öppna en webbläsare etc. Var och en av dessa åtgärder kommer att resultera i en reaktion från operativsystemet för att starta en ny dator/datortråd.

En tråd är en dator-/datorprocess som kommer att utföra/köra de olika stegen (programmeringssteg, ursprungligen skrivna i källkodsformat och regelbundet sammanställt av en kompilator) som krävs för att utföra uppgiften du frågade operativsystemet eller programvaran som körs på den .

I Linux identifieras en sådan tråd unikt med en PID (Process Identifier). Om du vill lära dig mer om PID i Linux kan du läsa våra artiklar Bash Automation and Scripting Basics (Part 3) och hur Linux-signaler fungerar: SIGINT, SIGTERM och SIGKILL.

I Windows identifieras en tråd också unikt med ett process-ID (se kolumnen PID i Windows Aktivitetshanterare), även om implementeringen av processhanteringen skiljer sig mellan Linux och Windows. olika underliggande kod, olika PID interaktionsverktyg etc. och begränsad kompatibilitet. Dessutom kan Windows process-ID PID inte förväxlas med produkt-ID PID (samma term, annan betydelse) eller VID (Leverantörs-ID). De två sistnämnda hänvisar till identifiering av enheter och är inte relaterade till processhantering.

När en tråd startar kan den i sig starta andra trådar. Den ursprungliga tråden kallas ofta huvudtråden. När du till exempel klickar på ikonen för din favoritwebbläsare startar den omedelbart en tråd (huvudtråden), och den tråden startar mycket snabbt flera undertrådar eller undertrådar och blir därmed överordnad tråd.

Annonsering

Du kan också tänka på trådar som löpare i ett lopp. Tänk till exempel på en upptagen databasserver som serverar många olika anslutna klienter. Var och en av dessa klienttrådar (notera användningen av ordtråden) kommer (i många fall) i och i sig att ha minst en tråd på databasvärdservern och/eller inuti själva databasprogramvaran (dvs. två trådar, en loggad in i operativsystemet och en inuti databasprogramvaran).

Databasservern försöker servera alla dessa trådar samtidigt & # 8211; därav termen samtidiga processer eller samtidiga trådar och om det finns buggar i databasprogramvaran (eller operativsystem, etc.) kan det förr eller senare komma i ett loppstillstånd.

Vad är ett tävlingsvillkor ?

Ett enkelt sätt att relatera detta till löpare som springer i ett lopp är att föreställa sig en fotomålning där två löpare verkligen korsar mållinjen vid samma tidpunkt. Det är möjligt, men ganska osannolikt, att detta inträffar i mänskliga raser. För datorer som bearbetar tusentals operationer per millisekund blir det mycket mer genomförbart.

Som ett annat exempel kan du föreställa dig en stafett där löpare skickar en stafettpinne (den prickiga färgade pinnen) från en person till nästa. Tänk dig nu att en av tävlingsdeltagarna gör ett misstag, och att det nu finns två löpare som tycker att de ska få den rödfärgade stafettpinnen.

En viktig händelse i ett stafettlopp är överföring av stafettpinnen, eftersom det kan innebära att den tidigare innehavaren av stafettpinnen kan sluta springa, och det är nu upp till den nya stafettägaren att ge sitt bästa. Det finns nu två löpare som tar tag i stafettpinnen. Det kommer att bli en intressant situation att titta på TV (om du gillar den typen av saker), men det är uppenbart att det kommer att bli något nedfall.

I huvudsak är ett tävlingsvillkor ett fel, fel eller fel i datorsystemkoden som ger oförutsägbara resultat: en oväntad händelseförlopp. Det orsakas normalt av två trådar som på något sätt strider mot mer än två trådar kan vara inblandade i den faktiska konflikten, och ofta körs mer än två trådar i programvaran som felaktigt.

Annons

I vår mänskligt ras exempel hade vi två personer som hade åtkomst till ett objekt ungefär samtidigt och korruptionen (en datorterm för att indikera att vissa data var skadade, där sådana data kunde finnas i minnet eller på disken eller i CPU, etc.) hände till att inträffa i det ögonblick där två personer (eller två trådar i datoranalogi) försökte ta tag i stafettpinnen och konflikten inträffade. I datortermer försökte två trådar skriva ett minnesutrymme som normalt bara skulle skrivas av en tråd (en löpare).

Rasförhållanden kan hända inom olika områden som inom elektronik, datorprogramvara och allmänt liv. Exempelvis är en samtalskollision en telekommunikationsterm för att beskriva situationen där en kommunikationskanal beslagtagits i båda ändarna samtidigt. Inuti datorprogramvara & # 8211; ett av de mest framträdande områdena för tävlingsförhållanden & # 8211; det finns ett brett utbud av tävlingsförhållanden möjliga.

Som ett annat exempel på ett tävlingsförhållande i datorprogramvara, föreställ dig två datatrådar som arbetar med ett visst minnesutrymme. En användare har precis begått ett formulär och backend-programvaran skriver detta formulär i minnet. Samtidigt läser en annan användare upp fälten i detta formulär från samma minnesutrymme. Beroende på vad som händer kan den läsande användaren få en delvis felaktig blankett med delvis uppdaterad information.

Förebyggande av rasförhållanden: Trådsäkerhet

Det har diskuterats mycket kring rasförhållanden i IT-branschen. Beroende på kodningsspråket du använder kan det finnas omfattande eller få bestämmelser för hantering av tävlingsförhållanden. En ofta använd term är trådsäkerhet eller en trådsäker applikations- eller programmeringsspråk [konstruktion]. Sådana termer används för att ange om en kod eller programvara som helhet är trådsäker , det vill säga skrivet på ett sådant sätt att man undviker och till och med förhindrar rasförhållanden.

Om programvara anses vara trådsäker anses den vara fri från möjligheten till rasförhållanden . I många fall anses & # 8216; anses & # 8216; trådsäker är det bästa utvecklare kan leverera, och desto mer när många trådar och interaktioner är möjliga. Komplexiteten hos många trådar som arbetar med många resurser kan lätt bli en myriad av kodhantering och en ännu större myriad av möjliga tävlingsförhållanden.

Olika programmeringskonstruktioner kan användas för att förhindra tävlingsförhållanden. Till exempel semaforer och mutexer. Komplexiteten med att använda sådana konstruktioner beror på det programmeringsspråk som används och deras inhemska stöd för förbättrad trådhantering. I C ++ kan man till exempel titta på klassen std :: mutex för att implementera ett mutex-lås (dvs. ömsesidigt exklusivt ) lås. I Bash hittar man emellertid inte en sådan konstruktion naturligt.

Annons

Stega vidare kan man också överväga vilka specifika konstruktioner, funktioner eller till och med körbara filer och bibliotek som redan är trådsäkra och sedan använda sådana konstruktioner, funktioner, körbara filer och bibliotek som bas för att bygga en ny konstruktion, funktion, körbar, bibliotek , eller ett komplett programvarupaket.

Att implementera även grundläggande hanteringskonstruktioner för trådsäkerhet kan vara en komplex fråga. Tänk till exempel på svårigheten att implementera en semafor i Bash.

Wrapping up

I den här artikeln undersökte vi datatrådar och tävlingsförhållanden. Vi tittade på analogier med löpningslopp och relälopp i människolivet för att utforska några grundläggande rasförhållanden som kan hända i datorer. Slutligen undersökte vi trådsäkerhet, olika implementeringar av tävlingshantering på datorkodningsspråk och hur vi kan förhindra tävlingsförhållanden.

Om du gillade den här artikeln, ta en titt på How Logic Gates Work: OR , AND, XOR, NOR, NAND, XNOR, och INTE artikel.