Sekcja krytyczna
Z Wikipedii
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:
- skopiowanie aktualnej wartości licznika do lokalnej zmiennej,
- zwiększenie tej wartości,
- 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.
|