Ograniczenie dostępu do zmiennej przez maksymalnie 1 wątek jednocześnie

Odpowiedz Nowy wątek
TeaMon
2012-12-29 17:56
TeaMon
0

Witam,
Często zachodzi potrzeba, aby dostęp do zmiennej będącej składowej klasy mógł być dostępny przez maksymalnie 1 wątek jednocześnie. W tym celu w języku C zamykałem tą zmienną w muteksie.

Rozumiem, że takim odpowiednikiem muteksu dla całej metody jest słowo kluczowe synchronized opisane tutaj:
http://docs.oracle.com/javase[...]ial/concurrency/syncmeth.html
Jak widać to działa na metodach, a nie zmiennych / obiektach.

Zasadnicze pytanie: czy słowo kluczowe synchronized stosuje się do zmiennych / kontenerow dostępnych w klasie np.
protected int zmienna_do_ktorej_powinien_pisac_jeden_obiekt_jednoczesnie?

Czy jest jakaś różnica między metodą synchronized, a stosowaniem muteksów z PThreads?

Pozdrawiam,

Pozostało 580 znaków

2012-12-29 18:38
Moderator

Rejestracja: 16 lat temu

Ostatnio: 54 minuty temu

0

ad.1.Da się zrobić to o czym mówisz:

void metoda(){
  synchronized(zmienna_do_ktorej_powinien_pisac_jeden_wątek){
    // operacje w sekcji krytycznej
  }
}

Poza tym jest znacznie wiecej różnych mechanizmów w javie związanych z synchronizacją. Są o tym całe książki i nie zamierzam się tutaj nad wszystkimi rozwodzić ;] Najpopularniejsze to:

  • metody synchronizowane
  • sekcje synchronizowane
  • locki z java.concurrent
  • zmienne volatile

ad.2. Jest różnica. Metoda synchronized to taka metoda że w danej chwili tylko jeden wątek może wykonywać którąś z metod synchronizowanych. Mutexy pozwalają ci tworzyć sekcje krytyczne o mniejszej granulacji niż metoda.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

TeaMon
2012-12-29 21:45
TeaMon
0

Dzięki. A tak przy okazji, czy to słowo kluczowe synchronized to przypadkiem nie wzorzec projektowy 'monitor'?

Pozostało 580 znaków

2012-12-29 22:23
Moderator

Rejestracja: 16 lat temu

Ostatnio: 54 minuty temu

0

Słowa kluczowe "synchronized" korzystają z monitorów, które w Javie są integralną częścią każdego obiektu. Nie wiem czy o to ci chodziło ;]


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Odpowiedz

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