Ένα mutex είναι ένα lock που εγγυάται mutual exclusion — μόνο ένα thread μπορεί να το κρατά και να μπαίνει στο προστατευμένο critical section κάθε φορά. Ένα semaphore το γενικεύει ώστε να επιτρέπει μέχρι N ταυτόχρονους κατόχους.
Ένα mutex είναι ένα lock που εγγυάται mutual exclusion — μόνο ένα thread μπορεί να το κρατά και να μπαίνει στο προστατευμένο critical section κάθε φορά. Ένα semaphore το γενικεύει ώστε να επιτρέπει μέχρι N ταυτόχρονους κατόχους.
acquire() μειώνει (μπλοκάρει στο 0), το release() αυξάνει. Ένα mutex είναι ουσιαστικά ένα semaphore με N=1 αλλά με σημασιολογία κατοχής (ownership).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 ώστε το release να είναι αυτόματο ακόμη και σε exceptions.Αυτά είναι τα καθημερινά εργαλεία για την προστασία κοινόχρηστης κατάστασης. Τα mutexes σειριοποιούν την πρόσβαση για να αποτρέψουν races· τα semaphores περιορίζουν ένα resource pool (connections, permits, rate limits). Η επιλογή του σωστού primitive και το να κρατάς τα critical sections μικρά είναι η διαφορά ανάμεσα σε σωστό-και-γρήγορο και σωστό-αλλά-αργό.
Μια βιβλιοθήκη ερωτήσεων συνέντευξης IT με αναλυτικές απαντήσεις — από Junior έως Senior.
Δωρεά