C# Szálkezelés Tóth Zsolt Miskolci Egyetem
2013
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
1 / 21
Tartalomjegyzék
1
Bevezetés
2
Szálkezelés
3
Konkurens Programozás
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
2 / 21
Process
Futó program egy példánya Egy program többször is futhat → több process Ütemezés egysége Kontextus Tulajdonságai I I
Azonosító (pid) ˝ Eroforrás adatok F F F
CPU ido˝ Memória Nyitott adatfolyamok
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
3 / 21
Thread
Végrehajtás szála Process kontextusban futnak
˝ Elonyök
Klasszikus process egy szálon fut.
Közös kontextus Kevesebb process
Egy process több szál
Nem kell IPC
Párhuzamosság
Alacsony menedzselési költség
Egyszer implementáció
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
4 / 21
Párhuzamosítás
The whole is more than the sum of its parts. Használata GUI Korszeru˝ CPU
I
Teljesítmény ↑
I
Megjelenítés Feldolgozás
Nagy adatmennyiség
Feladat felbontása
I
Egyszeru˝ részfeladatok
I
Egy folyamat egy feladat
I
Menedzselési költség
I I
pl.: rendezés O(n2 ) Nagy n esetén lassú Részek rendezése Összefésülés
Párhuzamos feldolgozás
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
5 / 21
Tartalomjegyzék
1
Bevezetés
2
Szálkezelés
3
Konkurens Programozás
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
6 / 21
Thread
System.Threading
Muveletek ˝
Szál reprezentálása
Start
Szál kezelése Konstruktor
Abort
I I
ThreadStart ParameterizedThreadStart
I I
CurrentThread IsAlive ThreadState
Tóth Zsolt (Miskolci Egyetem)
Suspend Resutme
Properties I
Join
Sleep Interupt
C# Szálkezelés
2013
7 / 21
ThreadStart
public delegate void ThreadStart() System.Threading.ThreadStart Delegátum Függvényt azonosít Thread konstruktor paraméter Nagy rugalmasság Implementációt futtatja a Thread Nincs paraméter
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
8 / 21
Thread
public delegate void ParameterizedThreadStart( Object obj) System.Threading.ParameterizedThreadStart Delegátum Függvényt azonosít Thread konstruktor paraméter ˝ Object paraméter → tetszoleges paraméter Castolás I I
as is
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
9 / 21
Thread Állapot
StopRequested Meg fog állni
Enumeráció Bitek (egyszerre több állapot) Állapotok
Stopped A szál megállt SuspendRequested A szál fel lesz függesztve
Unstarted Thread.Start nem lett Suspended Felfüggesztett meghívva AbortRequested Thread.Abort Running A szál fut meg lett hívva Background Háttér szál Aborted A szál halott, WaitSleepJoin Blokkolt Stopped-re vált.
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
10 / 21
Thread Állapot
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
11 / 21
Kritikus Szakasz
Abort megszakítja a futást! ˝ ˝ Tetszoleges idopont Inkonzisztens állapot Kritikus szakasz I I
I
˝ Elotte konzisztens állapot Fontos kód, inkonzisztens állapot Utána konzisztens állapot
Tóth Zsolt (Miskolci Egyetem)
Thread. BeginCriticalRegion(); //Kritikus szakasz Thread. EndCriticalRegion();
C# Szálkezelés
2013
12 / 21
Thread Prioritás
Ütemezést befolyásolja OS figyelembe veheti (nem ˝ kötelezo) Szálanként különbözo˝ Magasabb prioritás → fontosabb szál
Tóth Zsolt (Miskolci Egyetem)
1
Highest
2
AboveNormal
3
Normal
4
BelowNormal
5
Lowest
C# Szálkezelés
2013
13 / 21
Tartalomjegyzék
1
Bevezetés
2
Szálkezelés
3
Konkurens Programozás
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
14 / 21
˝ Osztott eroforrás kezelés
Közös kontextus ˝ Közös eroforrások Egyszerre hozzáférnek 7 Problémák Nem elemi muveletek ˝
Tóth Zsolt (Miskolci Egyetem)
Lost Update 1
x = 5;
2
t1: read(x);
3
t2: read(y);
4
t1: write(x+3);
5
t2: write(x-4);
C# Szálkezelés
2013
15 / 21
˝ Osztott eroforrás kezelés
Zárolás Elemi Csak egy szál férhet hozzá. Többi várakozik
Tóth Zsolt (Miskolci Egyetem)
lock(objektum) { //Zarolt resz, csak az adott szal kezelheti az objektumot }
C# Szálkezelés
2013
16 / 21
Producer–Consumer Probléma
Producer Klasszikus példa ˝ Szereplok I I I
˝ Idoközönként termel Eredményét a Storage–be rakja
Producer Consumer Storage
Storage ˝ Osztott eroforrás
˝ Vár, eloállítja a következo˝ terméket Consumer ˝ Idoközönként fogyaszt
˝ mind a Mind a termelok, fogyasztók elérik
˝ veszi ki Storage–bol Vár, feldolgozza a terméket
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
17 / 21
Holtpont ˝ Több eroforrás
Felengedés a szakasz végén
Több szál
Lockolás sorrendje kötött
lock(A) { lock(B) { //muveletek } }
lock(B) { lock(A) { //muveletek } }
Kölcsönösen lock–olják a másiknak szükséges objektumot és egyik sem tud tovább lépni!
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
18 / 21
Monitor
Osztály
Muveletek ˝
Statikus metódusok gyujteménye ˝
Enter TryEnter
Nem lehet példányosítani
Wait
Kontextus független
Pulse (Signal)
Thread safe
PulseAll
Objektumokhoz való szinkronizált hozzáférés
Tóth Zsolt (Miskolci Egyetem)
Exit
C# Szálkezelés
2013
19 / 21
Monitor Wait
Enter Object paraméter
Feloldja a zárolást
Zárolja az objektumot
Másik szál zárolásáig blokkolódik
Blokkolódik és vár
Várakozó sor
TryEnter bool visszatérési érték Holtpont elkerülés I I
blokkolódás mentes Timeout
Pulse Elengedi az objektumot Következo˝ szálat értesíti PulseAll
Exit
Összes várakozó szálat értesíti
Feloldja a zárolást
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
20 / 21
Lock–olás finomítása
Csak 1 szál férhet hozzá Különbözo˝ muveletek ˝ I I
Írás Olvasás
Metódusok AcquireReaderLock
Különbözo˝ zárolások
AcquireWriterLock
Finomabb szabályozás
ReleaseReaderLock
Egy írhat
ReleaseWriterLock
Többen olvashatják
UpgradeToWriterLock
Ha írják nem lehet olvasni
Tóth Zsolt (Miskolci Egyetem)
C# Szálkezelés
2013
21 / 21