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