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

  • bigky226

    bigky226

    11 HAZİRAN 2006
  • SomeOne Pro

    SomeOne Pro

    25 EKİM 2013
  • The Exploiteers

    The Exploite

    4 Ocak 2011