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

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • captainpuppys2000

    captainpuppy

    20 HAZİRAN 2013
  • Tina Chen

    Tina Chen

    26 Mayıs 2012