Wpis z mikrobloga

Cześć mirki z #programowanie i #cpp - mam problem nie tyle związany z kodowaniem co z wymyśleniem zasady według której ma działać mój program. Mam do rozwiązania problem producent-konsument, ale trochę rozwinięty, bo:
jest dwóch producentów - jeden robi jeden element, drugi dwa
dwóch konsumentów - jeden odczytuje jeden element, drugi dwa
mam jakąś kolejkę FIFO powiedzmy 10 elementową i mam nie pozwolić na jej przepełnienie/spadnięcie liczby elementów poniżej 4.
Zrealizować to muszę na monitorze, mam od wykładowcy jakąś prostą klasę monitora, condition variable i semaphore. Jednak moim problemem jest wymyślenie algorytmu według którego program ma działać. Nie mogę dopuścić do zagłodzenia, ani zakleszczenia. W tradycyjnym problemie producent-konsument używa się dwóch zmiennych warunkowych, które dbają o nieprzepełnienie/nie-opustoszenie kolejki. Jednak w tym przypadku to nie zda egzaminu, bo mogę ściągać/dodawać po 2 elementy. Jak rozwiązać ten problem? Myślałem o tym, żeby; jak załóżmy producent A doda element to powinien sprawdzić ile jest elementów i jeżeli jest miejsce na kolejne 2 to powinien obudzić producenta B, no i jak jest powyżej 4 to powinien obudzić odpowiednio konsumentów. Jednak to nie zdaje egzaminu, zakleszcza mi się to wszystko. Wydaje mi się, że ten kierunek rozumowania również jest błędny. Jakieś tipy? Żeby była jasność, nie oczekuję że ktoś za mnie o-----e zadanie domowe, jedynie potrzebuję jakiejś dobrej wskazówki.
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@g500s: Aha jeżeli nie dopuszczasz zagłodzenia tych co robią po dwa to jeżeli czekają to musisz brać ich pokolei, a nie tego którego akurat się da, w sumie to jedyny problem jaki widzę.
  • Odpowiedz
@lionbest: tak, kazdy konsument/producent posiada swoj watek. Czyli zastosowac dodatkowe flagi boolowskie do wybudzania w odpowiedniej kolejnosci? Ale kto powinien wybudzac producentow? Wszyscy? W sensie i konsumenci i producenci powinni wywolac signal na sobie? Zeby producent A np mogl pod rzad dodac kilka razy element czy zmuszony jestem budzic watki na zmiane, wzajemnie
  • Odpowiedz
@g500s: Bardziej ogólne rozwiązanie polegało by na kolejce FIFO dla gotowych producentów bądź konsumentów. No ale przy dwóch to raczej niema co się zastanawiać i pewnie by to mocno utrudniło ci implementacje.
  • Odpowiedz