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 — ერთდროულად ერთი thread
a.balance -= amt
b.balance += amt
# Semaphore: შეზღუდეთ თანადროული DB კავშირები 10-ით
sem = threading.Semaphore(10)
def query():
with sem: # 10-მდე thread ამას თანადროულად ასრულებს
db.execute(...)
with/RAII/defer, რომ გათავისუფლება ავტომატური იყოს გამონაკლისების დროსაც კი.ეს არის ყოველდღიური ხელსაწყოები გაზიარებული მდგომარეობის დასაცავად. Mutex-ები სერიალიზებენ წვდომას race-ების ასაცილებლად; semaphore-ები ზღუდავენ რესურსების pool-ს (კავშირები, permit-ები, rate limit-ები). სწორი primitive-ის არჩევა და critical section-ების პატარად შენარჩუნება არის სხვაობა კორექტულ-და-სწრაფსა და კორექტულ-მაგრამ-ნელს შორის.
IT გასაუბრების კითხვების ბიბლიოთეკა დეტალური პასუხებით — Junior-დან Senior-მდე.
შემოწირულობა