watki - pauzowanie,wznawianie

0

Mam pewna liste wartości typu int. Na każdym elemencie muszę wykonać pewne obliczenia z użyciem pozostałych elementów tej listy. Obliczenia są analogiczne, dlatego dla każdego elementu chcę wywołać osobny wątek (jeden dla jednego). Problem polega na tym żeby sie to odbywało następująco: każdy wątek wykonuje potrzebne obliczenia, gdy WSZYSTKIE już to zrobią przypisują nowe wartości swym elementom w liście. Gdy WSZYSTKIE nowe wartości zostaną zapisane w liście wątki lęcą od poczatku. Jak zrobić takie zatrzymanie,wznowienie?
tak wywołuje i tworze wątki:

my t1=new my(1);
t1.start();
my t2=new my(2);
t2.start();
....
 class my extends Thread{
        my(int a)
        {
      ...
        }
        public void run()
        {
...
        }   
    }
0

hmmm
a czy te twoje obliczenia maja wykorzystywac stare wartosci z tej liczby czy nowe, ktore przypiszesz jakostam do niej? bo jesli stare to nalezy wspomniec ze powinienes zrobic sobie jakas kopie tej starej listy i z niej brac wartosci, a do nowej te watki powinny zapisywac

0

najpierw na starych obliczenia, potem na nastepnych i nastepnych...

0

Ja bym zaproponował następujące rozwiązanie:

  1. Definiujesz obiekt podlegający obliczeniom, zawierający:
  • listę wartości wejściowych
  • listę wartości wyjściowych
  • licznik obliczonych wartości
  1. Definiujesz wątek wykonujący obliczenia:
  • w konstruktorze przekazujesz wcześniej zdefiniowany obiekt podlegający obliczeniom oraz indeks wartości, którą ten wątek ma obliczyć
  • wątek pobiera wartości wejściowe, wykonuje obliczenia i zapisuje wynik w odpowiednim miejscu na liście wartości wyjściowych
  • następnie zwiększa licznik obliczonych wartości o 1
  • jeśli wartość licznika będzie równa długości listy, to: kopiuje zawartość listy wartości wyjściowych do listy wartości wejściowych, a następnie powiadamia o tym pozostałe wątki; w przeciwnym przypadku czeka na powiadomienie
  • powtarza cykl obliczeń
  • należy tutaj zauważyć, że dostęp zarówno do listy wartości wejściowych jak i wartości wyjściowych nie musi być synchronizowany: lista wartości wejściowych jest używana tylko do odczytu, natomiast z listy wartości wyjściowych każdy wątek korzysta niezależnie z jednego jej elementu
  • w czasie gdy listy są kopiowane, dostęp do nich ma tylko jeden wątek - ten który zakończył obliczenia jako ostatni
  • synchronizacji wymaga jedynie dostęp do licznika
  1. Definiujesz klasę nadzorującą przebieg obliczeń, która:
  • tworzy i inicjuje obiekt podlegający obliczeniom
  • tworzy i startuje wątki

I to by było na tyle. :-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1