monitory koncepcja


Krzysztof Wójcik

KONCEPCJA ZADANIA 4 Z MONITORÓW


Zadanie:

Stos 9 elementowy LIFO. Danych jest 2 producentów i 2 konsumentów. Producent A produkuje liczby parzyste. Producent B produkuje liczby nieparzyste. Odczyt(usunięcie) jest dozwolone gdy suma liczb umieszczona na stosie jest nieparzysta lub gdy na stosie jest 7 lub wiecej liczb.

Rozwiązanie:

Moja klasa stos, ktora bedzie zawierala:

int stack[LENGTH];
int last;// pokazuje na pierwszy wolny element

/* operacje na stosie */
int init(void);
int push(int);
int pop(void);
void save(void); // zapisuje stos do pliku
int sum(void); // suma wszystkich elementow na stosie
int size(void);// ilosc elementow
int last_even(void);// czy ostatni element jest parzysty

Te funkcje beda utworzone metoda ctrl+c, ctrl+v z projektu z semaforami

Najwazniejsza klasa: moj_monitor, bedzie dziedziczyc z klasy Monitor.

class moj monitor : Monitor
{
private:
class stos;
condition full, empty, consA, consB;
public:
konstruktor;
funkcje put() i get();

FUNKCJE PUT I GET ZOSTALY ZMIENIONE WLASCIWE SA W IMPLEMENTACJI main.cpp

void put(int liczba){
enter();
if(buf.count==9) wait(full);
stos.push(liczba);

if(stos.size()>=7 && stos.last_even() == 1){

signal(consA);
}
else{
if(stos.size()>=7 && stos.last_even() == 1){

signal(consB);
};
};
signal(empty);
leave();
};

void get(){
enter();
if(stos.size() == 0) wait(empty);
if(lit=='A')
if(buf.count<3 || buf.bufor[buf.first]!='A') wait(A);
if(lit=='B')
if(buf.count<3 || buf.bufor[buf.first]!='B') wait(B);
buf.take_from_bufor();


if(buf.count>=3 && buf.bufor[buf.first]=='A')
signal(A);

else
if(buf.count>=3 && buf.bufor[buf.first]=='B')
signal(B);


if(stos.size()>=9) signal(full);
leave();
}
};


}// koniec klasy monitor


Reszta programu:
stworze globalny obiekt moj_monitor mon;



Konsumenci i producenci:

void* producentA(void *args){
while(1){
losowo tworzy liczbe parzysta x i robi:
mon.put(x);

};


void* konsumentA(void *args){

while(1){
sprawdza czy last_even() jest parzyste i jesli tak to robi:
mon.get(n);

};

konsument B i producent B robia analogicznie to samo dla liczb nieparzystych


Funkcja main():

bedzie bardzo podobna do tej z projektu z semaforow:

/* tworzenie watkow */
pthread_t prodA, prodB, consA, consB;
pthread_create(&prodA, NULL, &producentA, NULL);
pthread_create(&prodB, NULL, &producentB, NULL);
pthread_create(&consA, NULL, &consumerA, NULL);
pthread_create(&consB, NULL, &consumerB, NULL);

/* konczenie watkow */

pthread_join(prodA, NULL);
pthread_join(prodB, NULL);
pthread_join(consA, NULL);
pthread_join(consB, NULL);

watki sa z biblioteki
Testowanie:

Testowanie bedzie polegalo da zapisywaniu do pliku log aktualny stan bufora po kazdym wywolaniu get() i put().



Wyszukiwarka

Podobne podstrony:
Koncepcja monitoringu Pentol Codel nowy adres W1
7) Współczesne koncepcje tragizmu i tragiczności
Okulary do pracy przy monitorze
koncepcja naukowego procesu badawczego
MonitorInfo
Monitory studyjne porównanie 15
monitor 40 5 strana
Monitoring Wilka szarego
Koncepcja organizacji procesu szkolenia
06 S Wronka System monitorowania i kontroli wiązki
koncepcja Zagorski Emil(1)
Koncepcje zarządzania
Monitoring w szkołach

więcej podobnych podstron