Bir yarış durumu nedir?
Çok iş parçacıklı uygulamalar yazarken, en sık problem yaşanan bir yarış vardır.
Topluma sorum şu:
Bir yarış durumu nedir? Onları nasıl tespit ediyorsunuz? Onlara nasıl karşılık veriyorsun? Ve son olarak, nasıl oluşmasını engellemek musunuz?
CEVAP
Bir yarış durumu, iki veya daha fazla iş parçacığı paylaşılan verilere erişebilir oluşur ve aynı zamanda bunu değiştirmek için çalışıyorlar. İş parçacığı planlama algoritması her zaman iş parçacıkları arasında geçiş olduğundan, bu iş parçacığı veri paylaşmasını deneyecek sipariş bilmiyorsun. Bu nedenle, veri değişim sonucu iş parçacığı planlama algoritması bağlıdır, yani her iki iş ""/erişim için verileri değiştirmek. yarış
Sorunları sık sık ortaya çıktığında, bir iş parçacığı bir "check-sonra-act" (örneğin, "kontrol" değeri, X, o zaman "çalış" bir şey yapmak bağlı değeri olan X) ve başka bir iş parçacığı bir şey için değer arasındaki "kontrol" ve "hareket". E. g:
if (x == 5) // The "Check"
{
y = x * 2; // The "Act"
// If another thread changed x in between "if (x == 5)" and "y = x * 2" above,
// y will not be equal to 10.
}
Sonuç olarak, eğer bir şey, başka bir iş parçacığı x değiştirdi bağlı olabilir 10 veya kontrol ve hareket arasında olabilir. Bilmenin bir yolu var.
Meydana gelen yarış durumları önlemek için, tipik olarak paylaşılan veri etrafında bir kilidi yalnızca bir iş parçacığının aynı anda veri erişim sağlamak için. Böyle bir şey anlamına gelir:
// Obtain lock for x
if (x == 5)
{
y = x * 2; // Now, nothing can change x until the lock is released.
// Therefore y = 10
}
// release lock for x
Bir iterable ilk öğenin durumu eşleşen...
&Quot;T" yani &; gıt durumu" ...
Genel amaçlı 305 durumu nedir?...
SessionState ve görünüm durumu arasınd...
Nerede Scala implicits durumu nedir?...