Tentafrågor - Sant/Falskt Flashcards
En process är en applikation under körning och har minst en tråd från vilken nya trådar kan skapas. En flertrådad applikation har två eller flera trådar.
Sant
En process är ett enskilt program (eller applikation) medan en tråd är en del i processen. Varje process har ett separat minnesområde men trådar delar processens minne.
Sant
När man säger att en tråd blockerar menar man att tråden blockerar alla andra trådar för att den ska kunna gå in i en synkroniserad del av koden
Falskt
En metod är trådsäker om metoden kan köras samtidigt av flera trådar under Mutual Exclusion och utan att delade resureser modifieras på ett okontrollerat sätt.
Sant
En kritisk sektion (critical section) i ett program är ett kodavsnitt där det är nödvändigt att inte låta flera trådar ha tillgång till delad data samtidigt.
Sant
För att skydda en kritisk sektion kan man använda sig av en bounded buffer tillsammans med en räknarsemafor (counting semaphore)
Falskt
Mutual exclusion (ME) innebär att critical section (CS) behöver exekveras utan avbrott och endast av en tråd åt gången
Sant
“Safety” är en egenskap som betyder att en tråd någon gång kommer att göra framsteg, men vi vet inte när, dvs tråden kommer inte svälta
Falskt
“Liveness” är en egenskap som betyder att koden aldrig ger fel resultat vilket i sin tur innebär att en delad resurs alltid innehåller rätt värde
Falskt
Lokala variabler i en metod som körs av flera trådar sparas i trådarnas stackminne och därför har varje tråd sin egen uppsättning av lokala variabler och deras aktuella värden inte delas mellan trådar
Sant
För att en kodblock skall utföras atomärt (atomic) kan ett lås användas. Låset ger mutual exclusion. Monitorer, mutexer och binära semaforer kan användas som lås.
Sant
Ett mutex objekt och en binär semafor har minst en gemensam egenskap att båda fungerar som lås och låset kan bara släppas av den tråd som anskaffat det
Falskt
En tråd som sover för en viss tidsperiod (genom Thread.sleep) måste vänta på CPU att exekvera igen när tiden har gått
Sant
Asynkronprogrammering är mest lämplig när man har flera oberoende uppgifter (Tasks) då flera uppgifter kan göras samtidigt utan att vänta på att en uppgift är klar innan nästa kan börja
Sant
Ett av de fyra villkor som samtidigt ska råda för att deadlock ska inträffa är starvation
Falskt
Asynkronprogrammering kräver inte flertrådning medan vid concurrency är det flera trådar som kör samtidigt
Sant
“Interleave” innebär att en operation i t. ex. satsen “i++;” kan exekveras i flera steg och därmed kan interference inträffas i en kritisk sektion som inte är synkroniserad
Sant
Mutual exclusion låter bara en tråd i taget att gå in i en kritisk sektion och därmed förhindra deadlock
Falskt
Skillnaden mellan förgrunds- och bakgrundstrådar är att bakgrunddstrådar avbryts även om de inte är färdiga med sina uppgifter när huvudtråden är färdigt och stänger av applikationen
Sant
En “counting” semafor kan ha ett värde som är noll eller större än noll men aldrig negativt
Falskt
Ett asynkront anrop startar direkt men resultatet blir tillgänglig till den anropade koden när uppgiften (the task) är färdig
Sant
För att undvika race condition och interference i en operation med delad resurs behöver operationen göras atomärt (atomic). En operation som körs som en sammanhållen enhet eller odelbart kallas atomic (atomära).
Sant
En bounded buffer kan vara en array av variabler eller en samling (ex. ArrayList) av variabler men den kan bara användas tillsammans med semaforer. Monitorer kan inte användas av en boundedbuffer.
Falskt
En trådpool sägs vara non-blocking då trådar i poolen alltid är igång och aldrig väntar på att en uppgift ska bli klar.
Falskt
Parallelism är en form av concurrency som kan implementeras på såväl en-kärninga som flerkärninga processorer
Falskt
Asynkronprogrammering behöver inte trådar (förutom huvudtråden)
Sant
När en applikation stängs väntar huvudtråden inte på att bakgrundstrådar avslutar sina uppgifter och exekvera färdigt.
Sant
Varje monitor objekt är associerat med ett lås och en condition variabel
Sant
En mutex-objekt fungerar som en binär semafor men objektet äger låset vilket innebär att låset inte kan släppas av en annan tråd.
Sant
Mutual Exclusion löser problemet med Deadlock men Race Condition kan fortfarande inträffa
Falskt
Man kan aldrig vara säker på i vilken ordning trådar får exekveras när flera trådar exekveras samtidigt
Sant
En binär semafor, en mutex och en monitor kan alla skapa mutual exclusion
Sant
Trådpooler jobbar inte asynkront
Falskt
Trådpooler ökar prestandan speciellt när antalet trådar som samtidigt skall exekveras är större än antalet kärnor i en flerkärning processor
Falskt
Ett bounded buffer-objekt kan användas när två eller flera trådar som konsumerar data vill kommunicera med andra trådar som producerar data
Sant
För att deadlock skall inträffa skall fyra villkor vara uppfyllda samtidigt och dessa är: Fairness, bounded wait, race condition och spinning
Falskt
En tråd har ett tråd-ID, en programräknare, ett register och ett stackminne
Sant
Synkronisering med condition variabler görs i syfte att skapa mutual exclusion
Falskt
Mutual exclusion låter bara en tråd i taget att gå in i en kritisk sektion och därmed förhindra race condition
Sant
En metod är trådsäker om metoden kan köras samtidigt av flera trådar under Mutual Exclusion utan att den delade resurser modifieras på ett okontrolleras sätt.
Sant
Bounded Buffer kan inte användas med en writer-reader-lösning utan bara med producer-consumer-lösningar
Falskt
En semafors värde kan bli negativt vilket innebär att det finns trådar som väntar på att få tillstånd till en resurs
Sant
Concurrency (samtidigthet) kan på en enkärnig dator endast göras genom “time slicing”. Om en dator har två eller fler kärnor, används det fortfarande bara en kärna för concurrency.
Falskt
En applikation med 5 trådar blir 5 gånger snabbare om den körs på en dator som har 5 kärnor, jämför med om applikationen körs på en dator med endast en kärna (eller en CPU med en enda processor).
Falskt
När ett program laddas upp från en disk till minnet, exekveras det som en process - en process är en instans av en applikation under körning
Sant
En nyckelskillnad mellan processer (obs ej processor) och trådar är att flera trådar delar resurser som kan påverka deras status, medan ingen process direkt kan komma in i en annan process minnesområde.
Sant
Varje applikation har en huvudtråd. Trådar som skapas av huvudtråden blir barn (children) till huvudtråden
Sant
En sekvens av satser som behöver exekveras utan avbrott och endast av en tråd åt gången kallas för Critical Section eller Critical Region
Sant
Indeterminism innebär att en applikation med samma indata kan ge olika värden vid olika körningar
Falskt
Safety innebär att inget dåligt kommer att hända i applikationen
Sant
Liveness är en egenskap som betyder att en tråd någon gång kommer att göra framsteg men vi vet inte när
Sant
Liveness betyder att en tråd alltid gör framsteg utan avbrott
Falskt
Safety förhindrar alltid Race Condition medan Liveness förhindrar alltid Livelock
Falskt
För en tråd som utför anropet Thread.sleep(1000) gäller följande:
När denna tid har gått återupptar tråden alltid sin exekvering omgående
Falskt
För en tråd som utför anropet Thread.sleep(1000) gäller följande:
När denna tid har gått blir tråden körbar igen och när tråden åter är körbar kan den när som helst få chans att fortsätta exekvera
Sant
För en tråd som utför anropet Thread.sleep(1000) gäller följande:
Tråden förblir blockerad tills den väcks av en annan tråd genom anrop av metoden notify
Falskt
För en tråd som utför anropet Thread.sleep(1000) gäller följande:
Tråden gör ett uppehåll under en sekund. Tråden blockerar sig under detta tidsintervall vilket innebär att en annan tråd med lägre prioritet kan få chans att exekvera, om det inte finns någon annan körbar tråd med högre prioritet
Sant
wait() gör att en tråd avbryter sin exekvering och placeras i en kö
Falskt
notify() kan endast anropas av en tråd som äger monitorn
Sant
Metoderna wait(), notify() och notifyAll() måste anropas inifrån ett synkroniserat block av kod
Sant
När en tråd anropar notify() väcks en väntande tråd; Om väntekön är tom kommer monitorn ihåg signalen, dvs monitorer sparar signalhistoriken
Falskt
När en tråd blockeras betyder det att tråden väntar för att gå in i den kritiska sektionen tills en resurs blir tillgänglig
Sant
När en tråd blockeras betyder det att tråden blockerar alla andra trådar för att gå in i kritiska sektionen för ett visst antal millisekunder
Falskt
När en tråd blockeras betyder det att tråden låser kritiska sektionen för att skapa Mutual Exclusion
Falskt
När en tråd blockeras betyder det att tråden måste vänta tills alla andra trådar nått ett visst ställe i koden
Falskt
Anta att vid ett Reader-Writer-problem, har vi multipla reader- och multipla writer-trådar. Vi har en bounded buffer med N antal element:
När en writer och en reader vill gå in samtidigt i bufferten för att skriva resp. läsa data används två separata semaforer, en för reader-tråden och en för writer-tråden
Falskt (kommentar: Misstänker att påståendet är falskt för att det inte nämner att man behöver en mutex också)
Anta att vid ett Reader-Writer-problem, har vi multipla reader- och multipla writer-trådar. Vi har en bounded buffer med N antal element:
För att kontrollera writer-trådar att inte skriva när bufferten är full behöver vi en separat räknarsemafor.
Sant
Anta att vid ett Reader-Writer-problem, har vi multipla reader- och multipla writer-trådar. Vi har en bounded buffer med N antal element:
För att kontrollera reader-trådar att inte läsa när bufferten är tom behöver vi en separat räknarsemafor
Sant
Anta att vid ett Reader-Writer-problem, har vi multipla reader- och multipla writer-trådar. Vi har en bounded buffer med N antal element:
Vi behöver ha en mutex för att skapa mutual exclusion
Sant
En mutex låter endast en tråd komma åt en resurs
Sant
En mutex är egentligen en binär semafor
Falskt (men en binär semafor kan användas för ME)
En mutex kan endast släppas av den tråd som äger den
Sant
En tråd äger ett lås men inte en mutex
Falskt
Trådpooler är användbara för att begränsa antalet trådar som samtidigt körs.
Sant
En tråd i en trådpool skapas vid behov och tas bort när den är färdig med sin uppgift
Falskt
En trådpool är en samling av trådar som bara exekverar asynkrona uppgifter (tasks) i en applikation
Falskt
Trådpooler ger bättre prestanda jämfört med att skapa nya trådar hela tiden då att skapa en ny tråd har overhead och kräver allokering av stackminne
Sant
En condition variable är ett boolean uttryck som styr om en tråd skall fortsätta exekvera eller vänta
Falskt
Condition Synchronization görs inne i en synkroniserad sektion
Sant
Vid en bounded buffer kan en producer-tråd blockera så länge bufferten är full, vilket är ett exempel på condition synkronisering
Sant
En condition variabel är inte en boolean typ utan en kö där trådar väntar på att ett vilkor blir sant
Sant
En bounded buffer är en buffer av strängar som används för att garantera Mutual Exclusion
Falskt
En bounded buffer kan också användas för att säkerställa condition synkronisering
Falskt
En bounded buffer kan inte användas med en reader-writer-modell men fungerar bra med producer-consumer
Falskt
En bounded buffer kan användas när två eller flera trådar vill kommunicera med andra trådar som producerar data
Sant