Mutex ialah lock yang menjamin mutual exclusion — hanya satu thread boleh memegangnya dan memasuki critical section yang dilindungi pada satu-satu masa. Semaphore mengitlakkan ini untuk membenarkan sehingga N pemegang serentak.
Mutex ialah lock yang menjamin mutual exclusion — hanya satu thread boleh memegangnya dan memasuki critical section yang dilindungi pada satu-satu masa. Semaphore mengitlakkan ini untuk membenarkan sehingga N pemegang serentak.
acquire() mengurangkan (tersekat pada 0), release() menambah. Mutex pada asasnya ialah semaphore dengan N=1 tetapi dengan semantik pemilikan.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 supaya pelepasan adalah automatik walaupun apabila berlaku pengecualian (exception).Inilah alat harian untuk melindungi keadaan dikongsi. Mutex mensirikan akses untuk mencegah race; semaphore mencekik kolam sumber (sambungan, permit, had kadar). Memilih primitif yang betul dan mengekalkan critical section pendek ialah perbezaan antara betul-dan-pantas dan betul-tetapi-lambat.
Pustaka soalan temu duga IT dengan jawapan terperinci — daripada Junior hingga Senior.
Derma