/ / Kiedy to się dzieje? Wątek zawieszony w sekcji krytycznej - wielowątkowość, niezależny od języka

Kiedy to się dzieje? Wątek zawieszony w sekcji krytycznej - wielowątkowość, język-agnostyk

Zastanawiam się tylko, czy wątek znajduje się w części krytycznej, czy można go wykluczyć?

  • Wątek A: Wpisz CR
  • Wątek A: Zawieś się
  • Wątek B: Chce wprowadzić CR, ale nie może, ponieważ Wątek A ma zamek

Gdyby Wątek A wyprzedzone, a więc blokada muteksu utknęła Wątek A, Co można zrobić na ten temat?

Odpowiedzi:

5 dla odpowiedzi № 1

Oczywiście można to zapobiec. W przeciwnym razie, w jaki sposób inne wątki mogłyby próbować wejść do tej sekcji krytycznej, jeśli jedynym wątkiem, który może działać w tym procesie, jest wątek, który jest właścicielem sekcji krytycznej?

Wątek B w twoim przykładzie będzie czekał na wątek A.został przełożony i jest zakończony sekcją krytyczną. Nic dziwnego. A jeśli wątek A, gdy znajduje się w części krytycznej, również czeka na muteks będący własnością bada B, to jest to impas, który należy rozwiązać, poprawiając logikę.


6 dla odpowiedzi nr 2

Załóżmy, że wątek A jest blokowany przez wyższy priorytetwątek C. Załóżmy teraz, że wątek B ma w rzeczywistości wyższy priorytet niż C. Jeśli B stanie się uruchamialny, masz klasyczny przypadek odwrócenia priorytetu; Wątek B (wysoki priorytet) utknął w oczekiwaniu na zasób będący w posiadaniu wątku A (niski priorytet). Jedno lekarstwo na to nazywa się dziedziczeniem priorytetowym.

Z dziedziczeniem priorytetowym, gdy B blokuje dlazasób znajdujący się w posiadaniu A (sekcja krytyczna), wątek A tymczasowo „dziedziczy” priorytet wątku B. Pozwala to A zablokować ten kłopotliwy wątek C o średnim priorytecie, a gdy A zostanie wykonane z zasobem, A wraca do pierwotnego priorytet. To usuwa A z drogi, że tak powiem, eliminując impas.