Kölcsönös kizárás, atomicitás, szemafor.

Hasonló dokumentumok
Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Széchenyi István Egyetem

Grafikus felhasználói felület 3.

ios alkalmazásfejlesztés Koltai Róbert

Programozási nyelvek és módszerek Java Thread-ek

Using the CW-Net in a user defined IP network

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Informatika terméktervezőknek

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

BME MOGI Gépészeti informatika 4.

C#, OOP. Osztályok tervezése C#-ban

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Angol Középfokú Nyelvvizsgázók Bibliája: Nyelvtani összefoglalás, 30 kidolgozott szóbeli tétel, esszé és minta levelek + rendhagyó igék jelentéssel

ANGOL NYELV KÖZÉPSZINT SZÓBELI VIZSGA I. VIZSGÁZTATÓI PÉLDÁNY

INFORMATIKAI ALAPISMERETEK

Szoftvertechnolo gia gyakorlat

Concurrency in Swing

Szoftvertechnológia alapjai Java előadások

JNDI - alapok. Java Naming and Directory Interface

Objektumorientált programozás C# nyelven

Személyes adatváltoztatási formanyomtatvány- Magyarország / Personal Data Change Form - Hungary

9. MPI

Szakmai továbbképzési nap akadémiai oktatóknak december 14. HISZK, Hódmezővásárhely / Webex

INFORMATIKAI ALAPISMERETEK

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Contact us Toll free (800) fax (800)

KN-CP50. MANUAL (p. 2) Digital compass. ANLEITUNG (s. 4) Digitaler Kompass. GEBRUIKSAANWIJZING (p. 10) Digitaal kompas

(Asking for permission) (-hatok/-hetek?; Szabad ni? Lehet ni?) Az engedélykérés kifejezésére a következő segédigéket használhatjuk: vagy vagy vagy

TÉRGAZDÁLKODÁS - A TÉR MINT VÉGES KÖZÖSSÉGI ERŐFORRÁS INGATLAN NYILVÁNTARTÁS - KÜLFÖLDI PÉLDÁK H.NAGY RÓBERT, HUNAGI

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

ANGOL NYELV KÖZÉPSZINT SZÓBELI VIZSGA I. VIZSGÁZTATÓI PÉLDÁNY

Személyes adatváltoztatási formanyomtatvány - Magyarország / Personal Data Change Form - Hungary

Objektumorientált programozás C# nyelven

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Szoftvertervezés és -fejlesztés I.

Objektumorientált programozás C# nyelven

OOP: Java 4.Gy: Java osztályok

Objektumorientált programozás C# nyelven

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Szoftvertechnológia alapjai Java előadások

Travel Getting Around

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network

BME MOGI Gépészeti informatika 13.

Adatbázis-kezelés ODBC driverrel

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Kalapácsvetés 2016 szöveges

Eseménykezelés. Aszinkron kommunikáció

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

C# osztályok. Krizsán Zoltán

Léptetőmotorok. Előnyök: Hátrányok:

Task-alapú párhuzamosítás C# környezetben

Objektumorientált programozás C# nyelven III.

Programozási nyelvek Java

Phenotype. Genotype. It is like any other experiment! What is a bioinformatics experiment? Remember the Goal. Infectious Disease Paradigm

T Á J É K O Z T A T Ó. A 1108INT számú nyomtatvány a webcímen a Letöltések Nyomtatványkitöltő programok fülön érhető el.

Publish date 2/9/2013 4:11 AM. Change date 2/9/2013 4:11 AM

Programozás II gyakorlat. 4. Öröklődés

Konkurens TCP Szerver

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Adatbázisok webalkalmazásokban

BKI13ATEX0030/1 EK-Típus Vizsgálati Tanúsítvány/ EC-Type Examination Certificate 1. kiegészítés / Amendment 1 MSZ EN :2014

ENROLLMENT FORM / BEIRATKOZÁSI ADATLAP

Java és web programozás

Utasítások. Üzembe helyezés

Minta ANGOL NYELV KÖZÉPSZINT SZÓBELI VIZSGA II. Minta VIZSGÁZTATÓI PÉLDÁNY

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Proxer 7 Manager szoftver felhasználói leírás

LabView Academy. 4. óra párhuzamos programozás

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

4. Gyakorlat: Csoportházirend beállítások

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Vizuális programozás gyakorlat

Repair and maintenance services

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozási technológia 2.

Programozási nyelvek Java

USER MANUAL Guest user

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Szálak szinkronizálása (Ro- Sincronizarea threadurilor)

Osztályok. 4. gyakorlat

Objektumorientált programozás C# nyelven

Segédanyag: Java alkalmazások gyakorlat

ANGOL NYELVI SZINTFELMÉRŐ 2012 A CSOPORT. to into after of about on for in at from

OOP: Java 8.Gy: Abstract osztályok, interfészek

Cashback 2015 Deposit Promotion teljes szabályzat

Java programozási nyelv 4. rész Osztályok II.

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Átírás:

Kölcsönös kizárás, atomicitás, szemafor kertesz.gabor@nik.uni-obuda.hu

Lock lock (object o) struktúra C#-ban Kölcsönös kizárás megvalósítása object o: szinkronizációs objektum Bármely közös változó lehet, referencia típusúnak kell lennie Egyszerre csak egy szál szerezheti meg Amelyik szálnál az objektum, az tud belépni () a kritikus szakaszba Kilépéskor () a lockot elengedi FIFO várósor: first-come first-serve

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 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); 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

Reentrant lock Beágyazott lockok ugyanahhoz a szinkronizációs objektumhoz lock (locker) lock (locker) lock (locker) // Do something... Nem blokkolja önmagát Csak a legkülső Exit()-nél engedi el a lockot

Reentrant lock static readonly object _locker = new object(); static void Main() lock (_locker) AnotherMethod(); // We still have the lock - because locks are reentrant. static void AnotherMethod() lock (_locker) Console.WriteLine ("Another method"); Nem blokkolja önmagát Csak a legkülső Exit()-nél engedi el a lockot

Mutex Inter-process megoldás Lassabb mint a lock Mutex class példányain hívható a WaitOne() és a ReleaseMutex() a lock megszerzésére és elengedésére A lockot elengedi a folyamat bezárásakor is

Mutex static void Main() // Naming a Mutex makes it available computer-wide. Use a name that's // unique to your company and application (e.g., include your URL). using (var mutex = new Mutex (false, "oreilly.com OneAtATimeDemo")) // Wait a few seconds if contended, in case another instance // of the program is still in the process of shutting down. if (!mutex.waitone (TimeSpan.FromSeconds (3), false)) Console.WriteLine ("Another instance of the app is running. Bye!"); return; RunProgram(); static void RunProgram() Console.WriteLine ("Running. Press Enter to exit"); Console.ReadLine();

Szemafor Semaphore és SemaphoreSlim (>=.NET 4.0) A Semaphore folyamatok között is alkalmazható, de lassabb static SemaphoreSlim _sem = new SemaphoreSlim (3); static void Main() for (int i = 1; i <= 5; i++) new Thread (Enter).Start (i); static void Enter (object id) Console.WriteLine (id + " wants to enter"); _sem.wait(); Console.WriteLine (id + " is in!"); Thread.Sleep (1000 * (int) id); Console.WriteLine (id + " is leaving"); _sem.release(); 1 wants to enter 1 is in! 2 wants to enter 2 is in! 3 wants to enter 3 is in! 4 wants to enter 5 wants to enter 1 is leaving 4 is in! 2 is leaving 5 is in!

Atomicitás Atomi műveletek az Interlocked class metódusain keresztül Add(rex x, value), Subtract(ref x, value) Increment(ref x), Decrement(ref x) Exchange(ref int x, value) CompareExchange(ref x, int value, int originalvalue) (CompareAndSwap az előadásanyagból)

Monitor Action Enter, TryEnter Wait Pulse (signal), PulseAll Exit Description Acquires a lock for an object. This action also marks the beginning of a critical section. No other thread can enter the critical section unless it is executing the instructions in the critical section using a different locked object. Releases the lock on an object in order to permit other threads to lock and access the object. The calling thread waits while another thread accesses the object. Pulse signals are used to notify waiting threads about changes to an object's state. Sends a signal to one or more waiting threads. The signal notifies a waiting thread that the state of the locked object has changed, and the owner of the lock is ready to release the lock. The waiting thread is placed in the object's ready queue so that it might eventually receive the lock for the object. Once the thread has the lock, it can check the new state of the object to see if the required state has been reached. Releases the lock on an object. This action also marks the end of a critical section protected by the locked object. Forrás: MSDN

Monitor Monitor.Enter & Monitor.Exit gyakorlatilag a lock struktúra Monitor.Enter (_locker); try if (_val2!= 0) Console.WriteLine (_val1 / _val2); _val2 = 0; finally Monitor.Exit (_locker);

Monitor Here s how to use Wait and Pulse: 1. Define a single field for use as the synchronization object, such as: readonly object _locker = new object(); 2. Define field(s) for use in your custom blocking condition(s). For example: bool _go; //or: int _semaphorecount; 3. Whenever you want to block, include the following code: lock (_locker) while ( <blocking-condition> ) Monitor.Wait (_locker); 4. Whenever you change (or potentially change) a blocking condition, include this code: lock (_locker) < alter the field(s) or data that might impact the blocking condition(s) > Monitor.Pulse (_locker); //or: Monitor.PulseAll (_locker)

Feladat #0 4 szál egyidejűleg végez ismétlődő időigényes műveletet (random változó Thread.Sleep() segítségével imitálható), és amint részeredményt kapnak, azt a konzolra írják. Minden szál a konzol egy definiált sorába írhat (1-4), egy előre definiált színnel. Készítsen szálbiztos megoldást! Console.SetCursorPosition(x, y) Console.ForegroundColor = Console.Write( ) b) A részeredményeket menet közben összegezze biztonságosan egy közös változóba!

Feladat #1 Adott N db URL, amelyeken állományokat találunk, ezek együttes letöltése a feladatunk. Nem célszerű egyszerre elindítani N darab párhuzamos letöltést, felső korlát beállítására lehet szükség. Jól jöhet: new WebClient().DownloadFile(URL, PATH); new SemaphoreSlim(initialCount: LIMIT);

Feladat #2 Étkező filozófusok probléma megoldása monitorral az előadásanyag alapján Jól jöhet: Monitor.Enter() Monitor.TryEnter() Monitor.Wait() Monitor.Pulse()

Ajánlott olvasmány Joseph Albahari: Threading in C#, www.albahari.com