En mutex er en lock, der garanterer gensidig udelukkelse — kun én tråd kan holde den og gå ind i den beskyttede critical section ad gangen. En semaphore generaliserer dette til at tillade op til N samtidige holdere.
En mutex er en lock, der garanterer gensidig udelukkelse — kun én tråd kan holde den og gå ind i den beskyttede critical section ad gangen. En semaphore generaliserer dette til at tillade op til N samtidige holdere.
acquire() dekrementerer (blokerer ved 0), release() inkrementerer. En mutex er i bund og grund en semaphore med N=1, men med ejerskabssemantik.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, så frigivelse sker automatisk selv ved exceptions.Dette er de daglige værktøjer til at beskytte delt state. Mutexes serialiserer adgang for at forhindre races; semaphores begrænser en ressourcepulje (forbindelser, permits, rate limits). At vælge den rigtige primitive og holde critical sections korte er forskellen mellem korrekt-og-hurtig og korrekt-men-langsom.
Et bibliotek af IT-interviewspørgsmål med detaljerede svar — fra Junior til Senior.
Donér