Wpis z mikrobloga

Witam, jest tu ktoś kto ogarnia programowanie współbieżne w #java ( poziom b. początkujący) i najlepiej do tego jeszcze synchronizacje za pomocą #semafory ? Mam małe pytanko ( ͡° ͜ʖ ͡°)
Taguje to #programowanie
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@selol: @tell_me_more: Niestety wiem, że nie działa tak jak powinno do końca tzn. wyniki są dobre, ale muszą być spełnione wymogi powyżej. Niestety nie wiem czy dobrze to "wątkuje" i czy dobrze metody semaforów są położone. Tzn. wiem, że nie do końca tylko nie mam na razie pomysłu jak to zmienić.
  • Odpowiedz
@selol: po pierwsze - pobierasz kolejny indeks do sprawdzania (Sito:18) poza semaforami, więc może się zdarzyć, że 2 wątki będą działać na tej samej liczbie (i drugi z nich zatrzyma się na pierwszym obrocie, poczeka na koniec pierwszego obrotu pierwszego wątku, po czym przeleci wszystkie te same liczby jeszcze raz, a ten drugi wątek będzie czekać, i tak dalej, zmieniając kolejność wątków losow). Kupa niepotrzebnej roboty.

Poza tym, to może
  • Odpowiedz
@tell_me_more: Do pierwszej części: niestety wiem tylko nie wiem jak temu zaradzić, może zmienną statyczną w Main wprowadzić i po niej jechać w Sito:18 ? Wtedy teoretycznie powinno być dobrze ?

Do drugiej: To jest dobre pytanie, bo prowadzący to gbur i powiedział, że nie będzie mi mówił jak to powinno wyglądać, bo to moje zadanie xD Mam jedynie te wymagania co wkleiłem wyżej - żywcem wycięte z pdfa. Ja
  • Odpowiedz
@selol: spróbuj zrobić z tą zmienną statyczną. Choć wg mnie lepiej to przechowywać w klasie Main i też dostęp do tego blowoać tym samym semaforem, i zwiększać od razu w momencie pobierania, żeby 2 wątki nie sprawdzały od tej samej zmiennej.

Czyli cośw stylu:

const int maximum = Math.sqrt(Main.size)+1;
  • Odpowiedz
@tell_me_more: Dobra. Trochę wydaje mi się, że miejscami namieszałeś :D ( ale pewno tylko wydaje ;/ ). W każdym razie wcieliłem ten pomysł w życie pi razy drzwi i wyszło coś takiego:
https://pastebin.com/yT868Z2Y
https://pastebin.com/YwusLFLb

Uznałem, że te metody bez sensu skoro można zmieścić to w pętli, to i tak chyba wszystko jedno, albo i lepiej, że nie odwołuje się do metod ?
W każdym razie jak już jesteś w temacie
  • Odpowiedz
@selol: no więc jest źle, dlatego nie powinno się programować o 2 w nocy :) Nie można wychodzić z pętli jak trafimy na liczbę która już była wyczyszczona, bo np. dla i=5 trafimy na 15, które jest też wielokrotnością 3 i było wyczyszczone wcześniej i wjdziemy za wcześnie - nie wyczyścimy kolejnych wielokrotności 5.

Ale też nie możesz olać tej mojej zmiany z trzymaniem zmiennej od której lecimy w wątku -
  • Odpowiedz