Wpis z mikrobloga

@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 opisz
@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 to
@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;
int i=2;
while (i<maximum) {
Main.semaphore.aquire();
i = Main.nextToCheck;
Main.nextToCheck = Main.set.nextSetBit(Main.nextToCheck+1);
Main.semaphore.release();

for ...
Main.semaphore.aquire()
if (!Main.set.get(i)) { //żeby nie czyścić
@tell_me_more: czyli coś w stylu

const int maximum = Math.sqrt(Main.size)+1;
int i=2;
while (i<maximum) {
i = Main.getNextToCheck();
for ...
if (!Main.clearIfNeeded(j)) {
break;
}
}
}

a semafory dodaj na początku i końcu metod getNextToCheck i clearIfNeeded.

Gwarancji, że to jest poprawne nie daję, bo wielowątkowe programowanie jest skomplikowane, i jest wpół do drugiej :)
@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 -