Race Condition Nedir?
Yayın: · Son güncelleme:
Race Condition Nedir? Kısaca
Race condition (yarış durumu), iki ya da daha fazla işlemin aynı veriye aynı anda erişmesi ve sonucun işlemlerin hangi sırayla çalıştığına bağlı hâle gelmesidir. Bu durum tutarsız ve tekrarlanması zor hatalara yol açar.

Race condition nedir?
Race condition, Türkçede yarış durumu olarak bilinen bir eşzamanlılık hatasıdır. Birden fazla thread ya da istek aynı veriyi okuyup değiştirmeye çalıştığında, sonuç kimin önce davrandığına göre değişir. Kod mantığı doğru görünse bile sonuç bazen doğru, bazen yanlış çıkar.
Nasıl oluşur?
Bir e-ticaret sitesinde stokta tek ürün kaldığını varsayalım. İki müşteri aynı saniyede satın al butonuna basar. Her iki istek de stoku okur ve 1 görür. İkisi de "stok var" kararıyla siparişi onaylar, ardından stoku 0'a düşürür. Sonuçta tek ürün iki kişiye satılmış olur.
Sorunun kaynağı, "oku, karar ver, yaz" adımlarının bölünmez bir bütün olarak yapılmamasıdır. İki işlem bu adımların arasına girdiğinde veri tutarsızlaşır.
Neden bulunması zor?
Yarış durumu her çalıştırmada ortaya çıkmaz. Geliştiricinin bilgisayarında tek kullanıcıyla yapılan testte her şey kusursuz görünür. Hata ancak yoğun trafikte, belirli bir zamanlama denk geldiğinde görünür ve bu yüzden tekrar üretmek güçtür.
Nasıl önlenir?
Paylaşılan veriye erişimi kilitle sıraya koymak temel yöntemdir. Veritabanı tarafında transaction kullanmak ve stoku "stok sıfırdan büyükse bir azalt" gibi tek bir atomik sorguyla güncellemek, yukarıdaki örneği çözer. Mümkünse paylaşılan durumu azaltmak da riski düşürür. Ödeme ya da stok gibi kritik bir işlem yazıyorsanız, aynı isteği aynı anda iki kez göndererek test etmeyi alışkanlık hâline getirin.
Sıkça Sorulan Sorular
Race condition ne demek?
Race condition, kelime anlamıyla "yarış durumu" demektir. İşlemler aynı veriye ulaşmak için adeta yarışır ve kazananın kim olduğuna göre sonuç değişir.
Race condition güvenlik açığı olabilir mi?
Evet. Bir kontrol ile o kontrole dayalı işlem arasında boşluk varsa, bu boşluk kötüye kullanılabilir. Bu yüzden ödeme, bakiye ve yetki kontrollerinde atomik işlemler kullanılır.