Muteks to blokada gwarantująca wzajemne wykluczanie — tylko jeden wątek może go trzymać i wejść w chronioną sekcję krytyczną naraz. Semafor uogólnia to, dopuszczając do N współbieżnych posiadaczy.
Muteks to blokada gwarantująca wzajemne wykluczanie — tylko jeden wątek może go trzymać i wejść w chronioną sekcję krytyczną naraz. Semafor uogólnia to, dopuszczając do N współbieżnych posiadaczy.
acquire() dekrementuje (blokuje przy 0), release() inkrementuje. Muteks to w istocie semafor z N=1, ale z semantyką własności.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # critical section — one thread at a time
a.balance -= amt
b.balance += amt
# Semaphore: cap concurrent DB connections at 10
sem = threading.Semaphore(10)
def query():
with sem: # up to 10 threads run this concurrently
db.execute(...)
with/RAII/defer, by zwolnienie było automatyczne nawet przy wyjątkach.To codzienne narzędzia ochrony współdzielonego stanu. Muteksy serializują dostęp, by zapobiec wyścigom; semafory dławią pulę zasobów (połączenia, pozwolenia, limity szybkości). Dobór właściwego prymitywu i utrzymywanie krótkich sekcji krytycznych to różnica między poprawnym-i-szybkim a poprawnym-ale-wolnym.
Biblioteka pytań rekrutacyjnych IT ze szczegółowymi odpowiedziami — od Juniora do Seniora.
Wesprzyj