Aktywne Wpisy
![Bunch](https://wykop.pl/cdn/c3397992/Bunch_JK8um9soZl,q60.jpg)
Bunch +793
Ale akcja! Jakiś chłystek przyniósł sobie kolekcję sprejów i rozpoczął dumne niszczenie elewacji na skateparku. Do malującego wandala podeszło chwilę później dwóch mężczyzn i powiedziało "Odłóż ten sprej, policja" na co młodzieniec krzyknął "akurat!" i psiknął pierwszemu sprejem w oczy. To spowodowało eskalację sytuacji i szarpaninę w której... młodzieniec WYCIAGNĄŁ KASTET. Miał jednak pecha bo dwójka mężczyzn faktycznie okazała się policjantami bez munduru i teraz młody leży skuty. No to cyk!
![Bunch - Ale akcja! Jakiś chłystek przyniósł sobie kolekcję sprejów i rozpoczął dumne ...](https://wykop.pl/cdn/c3201142/4d4c6a11af2d4b98747372cf3390b787fc68a5285aa5285ccce3217b29a8b0e9,w150.png?author=Bunch&auth=4f3b6fe82ad7c8c9dd614175be789336)
źródło: kurde-jednak-faktycznie
Pobierz![80kg](https://wykop.pl/cdn/c0834752/301e9d92ea72e9df20773769a249b4942ac7823f1e996d6b55b9e84bc55d86e1,q60.jpg)
80kg +295
Mirki pijcie ze mną kawę. Wygrałem ekspres ciśnieniowy na targach IT. #chwalesie #programowanie #programista15k
![80kg - Mirki pijcie ze mną kawę. Wygrałem ekspres ciśnieniowy na targach IT. #chwales...](https://wykop.pl/cdn/c3201142/a445601bb0dbdf4728226abefa8bf88366469dcf7be045f786ac5301387f0bab,w150.jpg?author=80kg&auth=b8b43d7a7482087dd579ca2ffc4cb3c2)
źródło: 1000002975
Pobierz
Jak byście zrobili funkcje produce i consume do problemu producent-konsument, jeśli consume pobierałby jako argument wartość, którą ma pobrać z bufora. Jeśli w buforze nie byłoby tej wartości to by się zawieszał?
read()
i
select()
. Jeśli chodzi o zwrócenie wartości to errorkod albo wyjątek to praktycznie to samo, ale skoro #posix to raczej #jezykc niż #cpp, więc errorkod.
@ronin12: Konsument pobiera jako parametr liczbę, na którą ma czekać, aż się pojawi w buforze. Jak zrobić zwykłego producenta-konsumenta, to wiem :D
- void produce(int product) - dodaje do bufora (np. tablicy o stałym rozmiarze, czytanej i pisanej cyklicznie) nową liczbę (product),
- int consume(int awaitedProduct) - sprawdza czy jest w buforze liczba awaitedProduct, a jeśli nie ma to się blokuje, do czasu gdy się pojawi. Jeśli jest, to po prostu ją zwraca.
Przykładowa sytuacja:
1. Produce: 2
2. Consume: 3
Btw, po co konsumer zwraca wartość? Zgodnie z tym co rozumiem, zwrócona wartość zawsze będzie równa tej podanej do funkcji.
- jeden semafor (full) inicjowany zerem mówi ile jest zajętych miejsc w buforze,
- jeden semafor (empty) inicjowany maksymalną pojemnością bufora, mówi ile jest zajętych miejsc w buforze,
- jest jeden mutex synchronizujący dostęp do bufora.
Standardowo to by było tak (up - podniesienie semafora, down - opuszczenie):
produce(int i)
{
down(empty);
down(mutex);
//wstawienie do bufora
up(mutex);
up(full);
}
int consume()
{