Wpis z mikrobloga

#programowanie #java

Mam taki problem dotyczący wielowątkowości do rozwiązania. Jest sobie obiekt klasy Osoba z listą rzeczy do kupienia, jest sobie obiekt klasy Sklep i w każdym sklepie jeden Pracownik. Osoba prosi Pracownika o rzeczy z listy, jak czegoś nie dostanie to potem idzie do następnego sklepu. Jak rozwiązać wielowątkowość, żeby Osoba z Pracownikiem sensownie się komunikowały? Jak rozwiązać kolejkę oczekujących klientów? Macie jakiś pomysł, lub moglibyście mnie nakierować na sensowne materiały w tej tematyce?
Kacc - #programowanie #java

Mam taki problem dotyczący wielowątkowości do rozwiązani...

źródło: comment_vvWrZSOVBeF4tNWYMili40ykaY2OAYlU.jpg

Pobierz
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Kacc: Zaimplementuj w sklepie bufor o jakiejś tam wielkości (np. maksymalnej liczby klientów) i dopisuj tam klientów.

Pracownik niech pobiera klienta z buforu.

Uważaj na synchronizację wątków, żeby pracownicy nie pobierali tego samego klienta w tym samym momencie.
  • Odpowiedz
@Nadrill: to java ziomeczku

@phyrexia2007: jest jeden pracownik w jednym sklepie, więc nie będzie z tym problemu. Czyli klienta usypiać na czas stania w kolejce i potem pracownik wywołuje mu notify?
  • Odpowiedz
@Kacc: Ja bym to tak zrobił, potem po obsłużeniu usuwasz klienta z buforu i klient szuka następnego sklepu.

Na jakiej zasadzie klienci zostają przydzieleni do sklepu? Wszyscy do tego samego od razu idą i potem po kolei do następnych?
  • Odpowiedz
@Kacc: a po co w ogóle robić to w wątkach? Poza tym podejście do tego od strony sklepu i pracownika jest imo błędne, ale ja się nie znam.

Ja bym puścił pętle z iteracją po każdym kliencie. Albo coś takiego. Sam nie wiem. XD Idę stąd.
  • Odpowiedz
@Kacc: no to jak już, to można by dla każdego klienta utworzyć swój własny wątek żeby w tym wątku leciał pętle po sklepach i dziękuje. Ale gdyby tych klientów było wielu lub bardzo wielu, to nie ma szans.

Inne podejście: wątek dla każdego sklepu i iterowanie po klientach, po prostu. Pracownik obsłuży wszystkich to sobie idluje. Tylko trzeba by zrobić jakąś globalną kolejkę, albo coś.
  • Odpowiedz
@Kacc: http://pastebin.com/MFhx9pa7

To pisane na szybko w czasie jedzenia śniadanie więc pewnie jest źle i nie ma prawa działać, a w ogóle to jestem niewyspany i mnie głowa boli a zadanie jest głupie bo wątki są niepotrzebne. Pisane w notatniku, trzeba dodać importy i resztę kodu, główną metodę i posklejać w całość. A no i trzeba pomyśleć o synchronizacji.
  • Odpowiedz