SORU
29 AĞUSTOS 2008, Cuma


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
29 AĞUSTOS 2008, Cuma


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ABC News (Australia)

    ABC News (Au

    9 HAZİRAN 2008
  • Awesome Toys TV

    Awesome Toys

    18 HAZİRAN 2014
  • FOSDEM

    FOSDEM

    13 Ocak 2009