Szálszinkronizáció.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Öröklődés 2..
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Java programozási nyelv 3. rész – Osztályok I.
C# tagfüggvények.
C# tagfüggvények.
V 1.0 OE-NIK HP 1 Haladó Programozás Szálkezelés + szinkronizáció.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
 Alap tudnivalók Alap tudnivalók  Az If és a While folyamatábrák Az If és a While folyamatábrák  Probléma Probléma  A while ciklus (általános alak,
BINARIT TIMESHEET Több, mint munkaidő nyilvántartás Virág Zsolt (BINARIT Informatikai Kft.)„Hogyan legyek milliomos?” konferencia – BKIK ( )
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
Szécsi László 3D Grafikus Rendszerek 15. előadás
Logo Országos Számítástechnikai Tanulmányi Verseny
Vezetékes átviteli közegek
Programstruktúrák.
Script nyelvek előadás
AWK ismétlés AWK: adatvezérelt nyelv:
Scilab programozás alapjai
Egy üzemben sok gyártósoron gyártanak egy bizonyos elektronikai alkatrészt. Az alkatrészek ellenállását időnként ellenőrzik úgy, hogy egy munkás odamegy.
Programozás III. Gyakorlás.
A C++ programozási nyelv
A C++ programozási nyelv
PHP - függvények.
Algoritmusok és Adatszerkezetek I.
Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök
Kockázat és megbízhatóság
C# SZINTAKTIKÁJA Az egyes utasítások végén pontosvessző áll
Dependency Injection Moq Feladat
Adatbázis-kezelés (PL/SQL)
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hol található biztonsági megállóhely a vonalszakaszon?
2. Bevezetés A programozásba
Meghatározása, formái, mikéntje és „forrásai”
Script nyelvek előadás
Közigazgatási alapvizsga a Probono rendszerben
[Plakát címe] Lorem ipsum dolor sit amet, consectetuer adipiscing elit maecenas porttitor congue massa fusce [Az alábbi neveket és titulusokat cserélje.
Kvantitatív módszerek
Körmendi Dániel MAS Meeting Scheduler.
Számítógépes Hálózatok
Bemutatkozik az iskolapszichológus
Számítógépes Hálózatok
STRUKTURÁLT SERVEZETEK: funkció, teljesítmény és megbízhatóság
Kóbor Ervin, 10. hét Programozási alapismeretek
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Programozás I. 4. gyakorlat.
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Java Programozás 3. Gy: Java GUI Swing, AWT B IT M A N v:
UML tervezés.
Web programozás és haladó fejlesztési technikák Versenyhelyzet
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
A Lineáris Keresés Buktatói
B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++
Web programozás és haladó fejlesztési technikák Folyamatok és szálak
Thread és Task.
Folyamatok.
1.5. A diszkrét logaritmus probléma
A szállítási probléma.
B M Java Programozás 6. Gy: Java alapok IT A N Adatkezelő 2.rész
Matematika 11.évf. 1-2.alkalom
B M Java Programozás 2. Gy: Java alapok IT A N Adatszerkezetek
B M Java Programozás 8. Gy: Java alapok IT A N Adatkezelő 4.rész
Hol található biztonsági megállóhely a vonalszakaszon?
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Az impulzus tétel alkalmazása (A sekélyvízi hullám terjedése)
Valószínűleg nem jön elhinni, de 100%-ig igaz.
Szálszinkronizáció.
Négyzetjáték és bolyongás
Előadás másolata:

Szálszinkronizáció

Versenyhelyzet static int sum = 0; static void Main(string[] args) { Thread th01 = new Thread(Szamol); Thread th02 = new Thread(Szamol); th01.Start(); th02.Start(); th01.Join(); th02.Join(); Console.WriteLine("Sum: " + sum); Console.ReadLine(); } static void Szamol() for (int i = 0; i < 50000; i++) sum = sum + 1; Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)

Versenyhelyzet: lock static int sum = 0; static object lockObject = new Object(); static void Main(string[] args) { Thread th01 = new Thread(Szamol); Thread th02 = new Thread(Szamol); th01.Start(); th02.Start(); th01.Join(); th02.Join(); Console.WriteLine("Sum: " + sum); Console.ReadLine(); } static void Szamol() lock (lockObject) for (int i = 0; i < 50000; i++) sum = sum + 1; Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)

Versenyhelyzet: atomi művelet static int sum = 0; static void Main(string[] args) { Thread th01 = new Thread(Szamol); Thread th02 = new Thread(Szamol); th01.Start(); th02.Start(); th01.Join(); th02.Join(); Console.WriteLine("Sum: " + sum); Console.ReadLine(); } static void Szamol() for (int i = 0; i < 50000; i++) Interlocked.Increment(ref sum); Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)

Emlékeztető using System; using System.Threading; class Program { private static int counter = 0; private static object lockObject = new Object(); static void Main(string[] args) Thread t1 = new Thread(ThreadMethod); t1.Start(); Thread t2 = new Thread(ThreadMethod); t2.Start(); } private static void ThreadMethod() lock (lockObject) counter++; Thread.Sleep(500); Console.WriteLine("A számláló állása: " + counter); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Figyelem: SOHA ne írjunk le az alábbiakra hasonlító kódot: lock (this) vagy lock (typeof(Program)) azaz sose lockoljunk olyat, amiről nem tudjuk befolyásolni, ki fér hozzá A lock utasítás nélkül a metódus sorosan (egy szálon futtatva) helyesen működik, párhuzamosan (több szálon) azonban nem Forrás: Haladó Programozás labor anyagai

Parallel osztály int[] A = new int[] { 2, 4, 6, 8, 3, 1, 5, 7, 2, 0 }; Parallel.For(0, A.Length, i => Console.WriteLine(A[i]) ); Parallel.For(0, 100, i => Console.Write(i + " ")); Parallel.ForEach(A, i => Console.Write(i + " ")); Parallel.Invoke( () => Console.WriteLine("A"), () => Console.WriteLine("B"), () => Console.WriteLine("C"), () => Console.WriteLine("D"), () => Console.WriteLine("E") Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)

Holtpont static class DemoStaticClass { static int idx; static DemoStaticClass() //statikus konstruktor Task.Run(() => Valami()).Wait(); } static int InitValue { get { return 42; } } public static void Valami() { idx++; Console.WriteLine("valami"); } DemoStaticClass.Valami(); //a statikus konstruktor pont azelott fut le //hogy az osztaly valamely tagjat eloszor elernenk Console.WriteLine("ok"); //ide nem jut el Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)

Feladat Számoljuk meg, hány prímszám van 1 és 10 000 000 között! Az egyszerűség kedvéért az alábbi függvény segítségével döntsük el egy számról, hogy prím-e: static bool PrimSzamE(int szam) { if (szam <= 1) return false; if (szam <= 3) return true; for (int i = 2; i <= (int)Math.Sqrt(szam); i++) if (szam % i == 0) return false; return true; } Oldjuk meg a feladatot szekvenciálisan! Mennyi ideig tart? Oldjuk meg a feladatot Taskok segítségével! Alkalmazzuk a Parallel.For-t a megoldáshoz!

Feladat Készítsünk programot, amelyben 4 Task versenyez a konzolra íráson! Az egyes Taskok külön sorokba, különböző színnel írhatnak. Tipp: Console.SetCursorPosition(y, x); Console.ForegroundColor = c; Console.Write(s); Megjegyzés: a konzol ebben az esetben konkurrensen elért erőforrás, így a szinkronizációra ügyelni kell!