Race condition nedir? Bir örnekle nasıl önleneceğini gösterin.

Cevap

Race condition, programın sonucunun thread'lerin çalışma zamanlamasına/sırasına bağlı olmasıdır. Birden fazla thread paylaşılan veriye eşzamanlı erişip en az biri yazıyorsa ve erişim senkronize değilse oluşur.

Klasik örnek

counter += 1 tek bir işlem gibi görünür ama aslında üç adımdır: oku, artır, yaz.

import threading

counter = 0
def worker():
    global counter
    for _ in range(100_000):
        counter += 1        # atomik değil

threads = [threading.Thread(target=worker) for _ in range(4)]
for t in threads: t.start()
for t in threads: t.join()
print(counter)  # 400000'den az çıkabilir

İki thread aynı anda 5 okur, ikisi de 6 yazar: bir artış kaybolur.

Çözümler

lock = threading.Lock()
def worker():
    global counter
    for _ in range(100_000):
        with lock:          # kritik bölge
            counter += 1
  • Kilit (mutex): kritik bölgeyi tek thread'e açar.
  • Atomik işlemler: AtomicInteger, compare-and-swap (CAS).
  • Paylaşmamak: her thread kendi verisiyle çalışıp sonunda birleştirir; değişmez (immutable) veri.
  • Mesajlaşma: veriyi tek bir sahip yönetir, diğerleri kuyruktan istek gönderir (Go channel, actor modeli).

Uygulama seviyesindeki karşılığı

Aynı sorun veritabanında da görülür: iki istek aynı anda stoğu 1 okur, ikisi de satış yapar. Çözüm: UPDATE products SET stock = stock - 1 WHERE id = ? AND stock > 0 gibi atomik sorgu, SELECT ... FOR UPDATE veya versiyon numarasıyla iyimser kilitleme (optimistic locking).

Race condition'lar zamanlamaya bağlı olduğu için nadiren ve tutarsız biçimde ortaya çıkar; test ile yakalanması zordur. Check-then-act (if not exists: create) kalıbı en sık kaynaklardan biridir.

  1. Concurrency ile parallelism arasındaki fark nedir?Kolayİşletim SistemleriYazılım Müh.
  2. Context switch nedir? Neden maliyetlidir?Ortaİşletim SistemleriYazılım Müh.
  3. Virtual memory ve paging nasıl çalışır? Page fault nedir?Zorİşletim SistemleriYazılım Müh.
  4. Mutex ile semaphore arasındaki fark nedir?Ortaİşletim SistemleriYazılım Müh.
  5. Deadlock nedir? Oluşması için gereken dört koşul nelerdir ve nasıl önlenir?Zorİşletim SistemleriYazılım Müh.
  6. Process ile thread arasındaki fark nedir?Kolayİşletim SistemleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle