Sunteți pe pagina 1din 7

Ministerul Educaţiei, Tineretului şi Sportului al Republicii Moldova

Universitate Tehnică a Moldovei

Disciplina: „ Sisteme Operaționale”

Lucrarea de laborator Nr.2

Tema: Implimentarea metodelor de sincronizare a proceselor

A realizat: …….. ……………………..

st. gr. C-…

A verificat: Rotaru Lilia


Chişinău 2012

Scopul lucrarii:
 Însuşirea modalităţilor şi a mecanizmelor de sincronizare;
 Însuşirea modalităţilor de realizare a mecanizmelor de sincronizare;
Etapele de realizare:
Sincronizarea firelor de execuţie;
1)
Realizarea metodelor de sincronizare a firelor de execuţie;
2)
Crearea interfeţii programului;
3)
Prezentarea lucrării.
4)
Sarcina: Scriţi un program pentru 12 cititori şi 18scriitori, care înscriu în bază cîte 7
obiecte.

Listingul Programului:
package sola5_nb;

import java.util.*;

class Writer extends Thread

private static int writtenbooks=0;

private String name;

public static int semaphore=0;

public static Vector<String> writtenCount=new Vector<String>();

public static int bookCount=7;

public Writer(int name)

this.name=String.valueOf(name);

System.out.println(" Scriitorul NR. " + name);

public void run()

while(writtenbooks<bookCount)

2
{

if (semaphore==0)

semaphore=1;

writtenbooks++;

writtenCount.add(String.valueOf(writtenbooks));

System.out.println(" Obiectul este scris " + writtenbooks + " de scriitorul NR. " + name);

System.out.println(" " + " Obiecte scrise " + writtenCount.size());

if (writtenCount.size()==bookCount)

System.out.println("\n***Toate obiectele au fost scrise***\n");

semaphore=0;

try

{sleep(1000);}

catch(InterruptedException e)

this.stop();

class Reader extends Thread

private static int readbooks=0;

private static int stopAll=0;

private String name;

public static Vector<String> readCount=new Vector<String>();

3
public Reader(int name)

this.name=String.valueOf(name);

System.out.println(" " + " Cititorul NR." +name);

public void run()

if (Writer.semaphore==0)

while (readbooks<Writer.bookCount)

for(int i=0; i<Writer.writtenCount.size(); i++)

if (readCount.size()==readbooks)

if (stopAll==0)

System.out.println(" Obiectele necitite " + (Writer.bookCount-readbooks));

System.out.println("***Toate obiectele scrise au fost citite***");

stopAll=1;

this.stop();

else

System.out.println(" Este citit obiectul NR. " + Writer.writtenCount.elementAt(i) + " de cititorul NR. "
+ name);

if (readCount.elementAt(i).equals("0"))

4
readCount.set(i, "1");

readbooks++;

try

{ sleep(500);}

catch(InterruptedException e)

this.stop();

public class Sola5

public static void main(String[] args)

Reader.readCount=new Vector<String>(); //vectorul pentru obiectele citite

for (int i=0; i<7; i++) Reader.readCount.add(String.valueOf(0));//iniţializarea tabloului cu 0

Vector<Writer> w=new Vector<Writer>();//cititorii

for(int i=0; i<18; i++)

/*fiecare scriitor adaugă în poziţia "i" cu numele,

Identic cu numărul poziţiei*/

w.add(i, new Writer(i+1));

}
5
Vector<Reader> r=new Vector<Reader>();//cititorii

for(int i=0; i<12; i++)

r.add(i, new Reader(i+1));

/*ciclu pentru firele de execuţie, egal

max(numărul de scriitori, numărul de cititori)*/

for(int i=0; i<Math.max(w.size(), r.size()); i++)

/*dacă elementul curent este între scriitori/citirori, îl activăm */

if (i<w.size()) w.elementAt(i).start();

if (i<r.size()) r.elementAt(i).start();

6
Rezultatele obtinute:

Concluzie: In urma efectuarii acestei lucrari de laborator am acumulat cunostinte noi in


domeniul programarii cum ar fi cum ar fi crearea thread-urilor si crearea unui grup de
thread-uri. Elaborind aceasta lucrare am demonstrat ca am insusit cu succes tema data si
putem sa aplicam pe viitor cunostintele acumulate. Desi la inceput parea o lucrare grea sa
dovedit a fi o lucrere simpla datorita cursului pe care l-am studiat.

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