Sekcja krytyczna - Google

Sekcja krytyczna

Z Wikipedii

Skocz do: nawigacji, szukaj

Sekcja krytyczna - w programowaniu współbieżnym fragment kodu programu, w którym korzysta się z zasobu dzielonego, a co za tym idzie w danej chwili może być wykorzystywany przez co najwyżej jeden wątek. System operacyjny dba o synchronizację, jeśli więcej wątków żąda wykonania kodu sekcji krytycznej, dopuszczany jest tylko jeden wątek, pozostałe zaś są wstrzymywane. Dąży się do tego, aby kod sekcji krytycznej był krótki - by wykonywał się szybko.

Sekcje krytyczne realizuje się np. z wykorzystaniem muteksów lub semaforów. Ponadto systemy operacyjne posiadają zwykle specjalne obiekty do tego rodzaju synchronizacji w obrębie wątków jednego procesu.

Brak wzajemnego wykluczania się wykonywania sekcji krytycznych może spowodować błędy wykonania, np. dwukrotne zapisanie danej albo niepoprawna modyfikacja zasobu (patrz poniższy przykład).

[edytuj] Konsekwencja braku synchronizacji

Rozpatrzmy dwa procesy (P1, P2), które po wykonaniu zadania zwiększają pewien globalny licznik. Ponadto każdy proces dysponuje swoją lokalną pamięcią, niedostępną dla pozostałych.

Zwiększenie licznika jest realizowane w trzech krokach:

  1. skopiowanie aktualnej wartości licznika do lokalnej zmiennej,
  2. zwiększenie tej wartości,
  3. zapisanie nowej wartości do globalnego licznika.

Program, który to wykonuje składa się z następujących kroków:

1: x = licznik
2: x = x + 1
3: licznik = x

Poszczególne kroki jako takie są niepodzielne (atomowe), lecz wykonanie składającego się z nich programu może być w dowolnej chwili przerwane.

proces działanie licznik x1 x2 komentarz
1 ? ? sytuacja początkowa, licznik zainicjowany na wartość 1
P1 x1 = licznik 1 1 ? system operacyjny przekazuje sterowanie do P1, P1 wykonuje pierwszÄ… instrukcjÄ™
P1 x1 = x1 + 1 1 2 ? P1 kontynuuje działanie
P2 x2 = licznik 1 2 1 system operacyjny przełącza kontekst na P2, P2 wykonuje pierwszą instrukcję
P1 licznik = x1 2 2 1 system operacyjny z powrotem przełącza kontekst na P1, P1 kończy wykonywanie na aktualizacji globalnego licznika
P2 x2 = x2 + 1 2 2 2 system operacyjny z powrotem przełącza kontekst na P2, który kontynuuje działanie
P2 licznik = x2 2 2 2 P2 kończy działanie i aktualizuje globalny licznik błędną wartością

Powód błędu: oba procesy posługują się aktualną wartością licznika przy obliczeniach, nie uwzględniono sytuacji (która w tym przykładzie zaistniała), że zawartość licznika zmienia się w trakcie obliczeń.

Przy prawidłowym wykonywaniu tego kodu, to znaczy zagwarantowaniu sekcją krytyczną, że te trzy instrukcje wykonają się w całości wyłącznie w kontekście jednego procesu, końcową wartością licznika byłoby spodziewane 3.

proces działanie licznik x1 x2 komentarz
1 ? ? sytuacja początkowa, licznik zainicjowany na wartość 1
P1 x1 = licznik 1 1 ? system operacyjny przełącza kontekst na P1, P1 wykonuje pierwszą instrukcję
x1 = x1 + 1 1 2 ? P1 kontynuuje działanie
licznik = x1 2 2 1 P1 kończy wykonywanie na aktualizacji globalnego licznika
P2 x2 = licznik 2 2 2 system operacyjny ustawia kontekst na P2, P2 wykonuje pierwszÄ… instrukcjÄ™
x2 = x2 + 1 2 2 3 P2 kontynuuje działanie
licznik = x2 3 2 3 P2 kończy działanie i aktualizuje globalny licznik tym razem poprawną wartością

[edytuj] Zobacz też


Obama zamierza stworzyć 2,5 mln miejsc pracy
Amerykański prezydent-elekt Barack Obama oświadczył w sobotę, iż zamierza w ciągu pierwszych dwóch lat kadencji stworzyć 2,5 mln miejsc pracy.
APEC: wolny handel pozwoli zwalczyć kryzys
Przywódcy państw Azji i obu Ameryk, uczestniczący w szczycie państw regionu w Limie, uznali w sobotę, że wolny handel i reformy międzynarodowych instytucji kredytowych pozwolą światu na uniknięcie głębszego kryzysu.
"Bogate kraje wykupujÄ… ziemiÄ™ w krajach biednych"
Rządy i narodowe korporacje z bogatych państw wykupują miliony hektarów ziemi uprawnej w krajach rozwijających się, by zapewnić sobie dostawy żywności w dłuższym okresie - pisze w sobotnim wydaniu brytyjski dziennik "The Guardian".
Berlusconi: nadchodzi kryzys, który może być bardzo głęboki
Premier Włoch Silvio Berlusconi po raz pierwszy ostrzegł swych rodaków, że nadchodzi kryzys, który - jak dodał - może być "bardzo głęboki".
Szczyt APEC: przywódcy 21 państw radzą w Limie jak pokonać kryzys
Przywódcy 21 krajów z regionu Azji i Pacyfiku, którzy rozpoczynają w sobotę wieczorem (czasu polskiego) dwudniowe obrady w Limie, uznają zagrożenie dla świata, jakie stanowi obecny kryzys gospodarczy.
Linki: Strona g³ówna