[ doomed @ 18.01.2002. 13:23 ] @
Elem opis zadatka: Imamo u memoriji 5 buffer-a ( recimo 5x char buff[80]). Pravimo multithreading aplikaciju sa 8 niti gde svaka nit treba da zauzme jedan buffer upise neki sadrzaj i to se ispise na ekran. Onda se nit uspava neko vreme i vrati buffer.Ako nit ne uspe da dobije buffer onda ispise prazan red na ekranu. Sve u svemu neka vrsta memory menager-a.
Problem je u tome sto funkcije za zauzimanje/vracanje buffer-a treba da imaju oblik:
char* GetBuff( void )
void RetBuff( char* )
E sada GetBuff mozda i nije problem. Napravim strukturu sa dva polja : sam buffer( ili njegova adresa ) i jedno statusno polje ( buffer je zauzet/slobodan ). Ali kako sa RetBuff? Posto f-ja prima samo jedan argument - da li je resenje da poredim adrese zeljenog buffer-a i svih u strukturi pa koja se poklapa taj treba vratiti tj. tu treba promeniti statusno polje? Ima li neko drugu ideju?
[ Dragi Tata @ 18.01.2002. 16:05 ] @
Pre nego što se bacimo na razmatranje, molim te da razjasniš:

1. Da li koristiš C ili C++ ?
2. Koji OS koristiš?
[ doomed @ 18.01.2002. 23:02 ] @
Citat:
Dragi Tata:
Pre nego što se bacimo na razmatranje, molim te da razjasniš:

1. Da li koristiš C ili C++ ?
2. Koji OS koristiš?


koristim MSVS6. tj. c++. i win98. nije to neka velika filozofija samo me interesuje da li neko ima drugaciju ideju. Ova moja je nekako "sirova". Nije to neki megalomanski program ali bi bilo lepo cuti razlicite ideje
[ Dragi Tata @ 18.01.2002. 23:11 ] @
Pa, ako funkcije već moraju da imaju takav oblik, ne znam šta ti drugo preostaje. Pazi jedino da obezbediš bafere i statusna polja nekakvim "lock"-ovima (verovatno Critical sections) da ne bi bilo belaja.

[ doomed @ 19.01.2002. 00:03 ] @
Citat:
Dragi Tata:
Pa, ako funkcije već moraju da imaju takav oblik, ne znam šta ti drugo preostaje. Pazi jedino da obezbediš bafere i statusna polja nekakvim "lock"-ovima (verovatno Critical sections) da ne bi bilo belaja.



to naravno mora da ide u kriticne sekcije i jos par semafora zbog nekih sitnica
[ Dragi Tata @ 19.01.2002. 01:03 ] @
Nego, ima tu još jedna kvaka:

Šta ako korisnik tvog "menadžera" uradi nešto ovako?

Code:

char* buf = GetBuff();
buf++;
RetBuff(buf);


Možda nije loša ideja da umesto char* vratiš char *const, mada ne znam ni sam.
Uostalom, C-ov manager ne vodi računa o ovakvim situacijama, pa možda ne treba ni ti to da radiš.