Sunteți pe pagina 1din 5

Ministerul Educației, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică și Microelectronică
Catedra: Informatică și Ingineria Sistemelor

Raport
Disciplina: Programarea în Rețea

Lucrarea de laborator nr.2


Tema: Programare multi-threading

A efectuat student: Borta Sergiu, gr. TI-183

A controlat: Cebotari Daria

Chișinău 2020
Obiectivele lucrării: înțelegerea modelelor de execuție concurentă și cunoașterea tehnicilor
esențiale de sincronizare ale activităților bazate pe operațiile atomare ale semaforului; obiectivul
specific constând în crearea unei aplicații Java ce ar utiliza sigur diverse structuri într-un context
de execuție concurentă
Realizarea firelor de execuţie în Java/C#. Proprietăţile firelor. Stările unui fir de execuţie.
Lansarea, suspendarea şi oprirea unui fir de execuţie. Grupuri de Thread-uri. Elemente pentru
realizarea comunicării şi sincronizării.
Varianta 1:

Întrebari laboratorul 2 PROGRAMARE MULTI-THREADING:


1. Ce este un proces?
2. Ce este un fir de executie?
3. Diferenta dintre proces si fir de executie?
4. Definitia la Programarea concurenta?
5. Cind apare ,,deadlock”?
6. Ce este Semafor?
7. Ce este Mutex?
8. Synchronization?
1. Ce este un proces?
Un proces este un program activ, adică un program aflat în execuție. Este mai mult decât
codul programului, deoarece include contorul de programe, stiva de proces, registre,
codul programului etc.
2. Ce este un fir de executie?
Firul de execuție sau thread-ul este un mic proces sau task, având propriile instrucțiuni și
date.
3. Diferenta dintre proces si fir de executie?
Un thread este un proces ușor care poate fi gestionat independent de un
programator. Îmbunătățește performanța aplicației folosind paralelismul. Un fir
partajează informații precum segmentul de date, segmentul de cod, fișiere etc. cu firele de
peer, în timp ce conține propriile registre, stivă, contor etc.
4. Definitia la Programarea concurenta?
Programarea concurenta este activitatea de construire a unui program continand
procese multiple care se executa in paralel. Aceste procese sunt in competitie
pentru accesarea resurselor critice si coopereaza pentru realizarea anumitor task-uri. 
Program care in timpul executarii sale creeaza mai multe procese care se executa
intr-un paralelism abstract,adica nu neaparat pe procesoare distincte.
Deadlock
Un blocaj se întâmplă atunci când două fire așteaptă fiecare o resursă deținută de celălalt,
deci niciunul nu poate continua.
Semafor
Semaforul este o primitivă de sincronizare a proceselor și firelor, bazată pe un contor, pe
care puteți efectua două operații atomice: creșterea și scăderea valorii cu una, în timp ce operația
de decrementare pentru valoarea zero a contorului este blocare. Servește pentru construirea unor
mecanisme de sincronizare mai complexe și este utilizat pentru a sincroniza sarcini de rulare
paralele, pentru a proteja transmisia de date prin memoria partajată, pentru a proteja secțiunile
critice și pentru a controla accesul la hardware.
Mutex
Un Mutex este un steag care se exclude reciproc. Acționează ca un pastrator de poartă
către o secțiune de cod care permite un fir de acces și blochează accesul la toate celelalte. Acest
lucru asigură faptul că codul controlat va fi lovit doar de un singur fir la un moment dat.
Asigurați-vă că eliberați mutex-ul când ați terminat.
Forma completă a Mutex este obiectul de excludere reciprocă. Este un tip special de
semafor binar folosit pentru controlul accesului la resursa partajată. Acesta include un mecanism
de moștenire prioritară pentru a evita problemele de inversare a priorităților extinse. Permite
sarcinilor curente cu prioritate mai mare să fie menținute în starea blocată pentru cel mai scurt
timp posibil. Cu toate acestea, moștenirea prioritară nu corectează inversarea priorităților, ci doar
minimizează efectul acesteia.

Synchronization
Sincronizarea este capacitatea de a controla accesul mai multor fire la orice resursă
partajată. Sincronizarea este o opțiune mai bună în cazul în care dorim să permitem accesului
unui singur fir la resursa partajată. Sincronizarea firelor este definită ca un mecanism care
asigură că două sau mai multe fire simultane nu execută simultan un anumit segment de program
cunoscut sub numele de secțiune critică.
Sincronizarea este folosită în principal

1. Pentru a preveni interferența firului.


2. Pentru a preveni problema consistenței.
Tipuri de sincronizare
Există două tipuri de sincronizare
1. Sincronizare proces
2. Sincronizarea firului

Codul sursă:
using System;
using System.Threading;
namespace Lab2
{
class Program
{
private static Thread t1, t2, t3, t4, t5, t6, t7;

static void Main(string[] args)


{
t1 = new Thread(new ThreadStart(Thread1));
t2 = new Thread(new ThreadStart(Thread2));
t3 = new Thread(new ThreadStart(Thread3));
t4 = new Thread(new ThreadStart(Thread4));
t5 = new Thread(new ThreadStart(Thread5));
t6 = new Thread(new ThreadStart(Thread6));
t7 = new Thread(new ThreadStart(Thread7));
t1.Start();
t2.Start();
t3.Start();
t4.Start();
t5.Start();
t6.Start();
t7.Start();

}
static void Thread1()
{
Console.WriteLine("Thread 1");
}
static void Thread2()
{
t1.Join();
Thread.Sleep(1500);
Console.WriteLine("Thread 2");
}
static void Thread3()
{
t1.Join();
Thread.Sleep(1500);
Console.WriteLine("Thread 3");
}
static void Thread4()
{
t1.Join();
t2.Join();
t3.Join();
Thread.Sleep(1500);
Console.WriteLine("Thread 4");
}
static void Thread5()
{
t4.Join();
Thread.Sleep(1500);
Console.WriteLine("Thread 5");
}
static void Thread6()
{
t4.Join();
Thread.Sleep(1500);
Console.WriteLine("Thread 6");
}
static void Thread7()
{
t4.Join();
Thread.Sleep(1500);
Console.WriteLine("Thread 7");
}

}
}

S-ar putea să vă placă și