Nowe posty

Autor Wątek: Synchronizacja wątków (przydkład rzeczywisty)  (Przeczytany 2571 razy)

beksa1

  • Gość
Synchronizacja wątków (przydkład rzeczywisty)
« dnia: 2012-02-01, 23:34:25 »
Witam,
Mam oto takie zadanie z "reala":



Bezapelacyjnie odnosi się ono do synchronizacji wątków, ale nie wiem jak to zrobić. Bo przecież nie napiszę, że na kobietę w ciąży nakładamy semafora lub mutexa, chyba wiecie co mam na myśli :)

Jedna sensowna (chyba) odpowiedź jaka wpadła mi do głowy to... obsługujemy klienta z większym priorytetem do momentu gdy druga kolejka klientów zwykłych z niższym priorytetem nie dojdzie do drzwi sklepu. Gdy druga kolejka dojdzie do drzwi sklepu to tymczasowo blokujemy kolejkę z wyższym priorytetem i obsługujemy WSZYSTKICH z drugiej kolejki aby nie doprowadzić do czekania klientów w nieskończoność z powodu kobiet w ciąży - zagłodzenia.


Czy takie rozwiązanie jest poprawne ? Czy należy to jakoś lepiej napisać ?

Jeżeli jest OK to jak można w systemie zaprogramować taką sytuację, że gdy w kolejce z niższym priorytetem jest N procesów/wątków to pomiń procesy/wątki z wysokim priorytetem i obsłuż te z drugiej kolejki ? Dotychczas korzystałem tylko z semaforów / mutex / zmienne warunkowe, a takie coś to co to ?

Proszę o pomoc, pozdrawiam :)

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
Synchronizacja wątków (przydkład rzeczywisty)
« Odpowiedź #1 dnia: 2012-02-02, 00:12:27 »
Cytuj
obsługujemy klienta z większym priorytetem do momentu gdy druga kolejka klientów zwykłych z niższym priorytetem nie dojdzie do drzwi sklepu.
Nie masz pewności, że kolejka "dojdzie do drzwi" w rozsądnym czasie. Jeżeli na osiedlu będzie tylko jedna kobieta nie będąca przy nadziei, to może z tego sklepu już nie wyjść.

Ksanderon

  • Gość
Synchronizacja wątków (przydkład rzeczywisty)
« Odpowiedź #2 dnia: 2012-02-02, 00:23:39 »
jeśli będzie na prawdę dużo klientów- możesz paradoksalnie zagłodzić kobiety w ciąży(gdy kolejka długo będzie kończyć się za drzwiami i będą dochodzić nowi taki priorytet nic nie da) żeby temu zaradzić można by ustawić 2 kolejki, kobiety w ciąży obsługiwać pierwsze, chyba że ciężarna obsługiwana byłaby 10 raz(od tego stosunku zależałby priorytet konkretnego zdarzenia) z rzędu, wtedy obsługa jednej osoby z drugiej kolejki- obie kolejki się posuwają- jedna wolniej druga szybciej niezależnie od "natężenia ruchu".

Co więcej przy założeniu(chyba uzasadnionym), że ciężarnych jest mniej niż reszty społeczeństwa stosunek priorytetu kolejek mógłby być nawet 1:1 a ciężarne i tak miały by sporą przewagę(przeciętnie były by szybciej obsłużone).

ZipoKing

  • Gość
Synchronizacja wątków (przydkład rzeczywisty)
« Odpowiedź #3 dnia: 2012-02-02, 10:08:28 »
Aż przypomniała mi się scena z serialu "Alternatywy 4", gdzie lokatorzy jednego z mieszkań non stop wychodzili z Panem Antonim (ten starszy człowiek na wózku inwalidzkim) "na spacer" bo akurat gdzieś w którymś sklepie rzucili papier toaletowy :)
Rozwiązaniem tego problemu może być "priorytetowanie" kolejek, tzn. po obsłużeniu np. 4 "kobiet przy nadziei" ekspedientka powinna obsłużyć jedną osobę z kolejki nieuprzywilejowanej. Stosunek 4/1 można też próbowac zmieniać biorąc pod uwagę długość poszczególnych kolejek (ale nie schodząc np. poniżej 2/1 - koniec końców kolejka priorytetowa nie może stracić swojego przywileju.
Wersja dla kujonów: weź pod uwagę fakt, że osoby z obu kolejek mogą zmieniać się miejscami (np. pani w ciąży może przejść do drugiej kolejki aby z koleżanką omówić ostatnie wydarzenia ze świata telenowel, tudzież osoby z kolejki nieuprzywilejowanej mogą postanowić o bezpośrednim udziale w zwiększeniu przyrostu naturalnego :))
A jeżeli już jesteśmy w temacie kolejek i kobiet w ciąży to na koniec doskonały cytat ze wspomnianego serialu: "Pan tu nie stał, pan nie jest w ciąży" :)