Wpis z mikrobloga

@patste: Co to znaczy zsynchronizować obiekty w liście? Lista jest tylko pojemnikiem i nie powinna mieć wpływu na thread-safety obiektów, które przetrzymuje. Lista w ogóle nie musi wiedzieć obiekty jakiego typu przechowuje więc tym bardziej skąd ma wiedzieć jak zadbać o ich thread-safety.
@Legol: Mam kilka objektów w liście, które muszą być jednocześnie zablokowane i po wykonaniu funkcji odblokowane. Poza tym jeden objekt może znajdować się w kilku listach. Mój jedyny pomysł to zrobić foreach i blokować po kolei używając lock a po wykonaniu funkcji unlock. Tylko prawdopodobnie nie mogę tego użyć (specyfikacja zadania).
Zadanie polega na tym, że mam obszar rozmiarów (w, h) w którym każdę pole odpowiada jednemu wątkowi i muszę zsynchronizować
@patste: Moim zdaniem synchronizacja musi być na poziomie klasy Field. Każde pole może zawierać instancje klasy Semaphore. Jeżeli dany wątek będzie chciał wykonać operację musi pobrać lock z semafora (tryAquire) z wszystkich sąsiednich klas (najlepiej na timeoucie, żeby deadlocka od razu mieć).
@patste: To wygląda na idealny przykład na użycie STM. Ewentualnie na przykład, który powinien pozbyć się niezależnych wątków i liczyć to jakoś inaczej, np. w jednym kroku wszystkie (3m,3n), w następnym (3m,3n+1) itd aż do (3m+2,3n+2), a kroki jakoś synchronizować.
@Legol
@vytah
Zaimplementowałem w ten sposób, że każde pole zawiera ReentrantLock. W metodzie run blokuję wszystkie sąsiednie pola w odpowiedniej kolejności aby uniknąć deadlocka, t.j. (x,y), (x+1,y), ... , (x+k,y), (x, y+1), (x+1,y+1), ... , (x+k, y+1) ... (x+k,y+k). Działa, dzięki :)