Bir mutex, mutual exclusion'ı garanti eden bir kilittir — aynı anda yalnızca bir thread onu tutabilir ve korunan critical section'a girebilir. Bir semaphore bunu N eşzamanlı tutucuya izin verecek şekilde genelleştirir.
Bir mutex, mutual exclusion'ı garanti eden bir kilittir — aynı anda yalnızca bir thread onu tutabilir ve korunan critical section'a girebilir. Bir semaphore bunu N eşzamanlı tutucuya izin verecek şekilde genelleştirir.
acquire() azaltır (0'da bloklanır), release() artırır. Bir mutex, esasen N=1 olan ama sahiplik semantiğine sahip bir semaphore'dur.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 kullanın.Bunlar paylaşılan durumu korumak için günlük araçlardır. Mutex'ler race'leri önlemek için erişimi serileştirir; semaphore'lar bir kaynak havuzunu (bağlantılar, izinler, rate limit'ler) kısıtlar. Doğru primitif'i seçmek ve critical section'ları kısa tutmak, doğru-ve-hızlı ile doğru-ama-yavaş arasındaki farktır.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap