Lock
- Python kursu
- Uzman
- Ders 32/47
- 5 dk
threading.Lock ile kritik bölgeyi öğrenirsin.
threading.Lock nedir?
threading.Lock paylaşılan bir kaynağa aynı anda yalnızca bir parçacığın erişmesini sağlar. .acquire() kilidi alır, .release() bırakır.
Bir kritik bölge, birden çok parçacığın aynı kaynağa yazdığı kod parçasıdır. Kilit olmadan iki parçacık aynı anda yazabilir ve veri yarışı oluşur. Lock ile bu bölgeyi korursun: ilk parçacık acquire yapar, işini bitirip release yapana kadar diğerleri bekler. Bu, parçacıklı programlamanın temel güvenlik aracıdır.
with Lock kullanımı
with lock: bloğu kilidi otomatik alır ve bırakır. acquire/release yazmaktan daha güvenlidir; çünkü istisna olsa bile kilit otomatik bırakılır.
Bu desen context manager olarak bilinir. Bloğa girince acquire, çıkınca release çağrılır. Kilitlemeyi unutmak yaygın bir hatadır; with bunu önler. Üretime gidecek kodda her zaman with lock: tercih edilmelidir.
Uygulama Lock ile kritik bölge
from threading import Lock ile içe aktar. lock = Lock() ile kilit oluştur. lock.acquire() çağır, print("kritik") yap, lock.release() çağır.
Başlangıç kodu
# kilit oluştur
# kritik bölgeyi koru
# yazdırÖrnek çözüm
from threading import Lock
lock = Lock()
lock.acquire()
print("kritik")
lock.release()Beklenen çıktı
kritik
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Lock.acquire ne yapar?
lock = Lock()
lock.acquire()
# kritik bölge
lock.release()- Kilit durumunu döndürür
- Kilidi siler
- Kilidi bırakır
- Kilidi alır, başkası varsa bekler Doğru cevap
Açıklama: acquire kilidi alır; başka parçacık tutuyorsa bekler.
2 acquire çağrısını tamamla
lock = Lock()
lock.____()
print("kritik")
lock.release()
lock = Lock()
lock.acquire()
print("kritik")
lock.release()
Açıklama: Bu yöntem kilidi talep eder.
3 Lock kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
Lock |
Kilit nesnesi |
acquire |
Kilidi alır |
release |
Kilidi bırakır |
kritik bölge |
Korunan kod |