SORU
17 Mayıs 2011, Salı


Kilit tam olarak nasıl çalışır?

İş parçacığı güvenli olmayan nesneleri kullanmak için böyle bir kilit ile: kodu saran görüyorum

private static readonly Object obj = new Object();

lock (obj)
{
    // thread unsafe code
}

Birden çok iş parçacığı aynı kod (......ASP.NET bir web çalışan olduğunu varsayalım uygulama) erişimi olacak. Sıraya? Ne kadar beklerler?

Performans kilitleri kullanma nedeniyle etkisi nedir?

CEVAP
17 Mayıs 2011, Salı


lock deyimi aşağıdaki C# 3.0 ile çevrilmiş

var temp = obj;

Monitor.Enter(temp);

try
{
    // body
}
finally
{
    Monitor.Exit(temp);
}

C 14* *# 4.0 ve olarak elde edilir

bool lockWasTaken = false;
var temp = obj;
try
{
    Monitor.Enter(temp, ref lockWasTaken);
    // body
}
finally
{
    if (lockWasTaken)
    {
        Monitor.Exit(temp); 
    }
}

Monitor.Enter here ne yaptığı hakkında daha fazla bilgi bulabilirsiniz. MSDN alıntı:

Enter Monitörde elde etmek için kullanın bu nesne parametre olarak geçildi. Eğer başka bir iş parçacığı Enteryürüttü nesne üzerinde ama henüz yerine getirmemiştir ilgili Exit güncel iş parçacığı diğeri kadar engeller iş parçacığı nesnesini serbest bırakır. Bu çağırmak için aynı iş parçacığı için yasal Enter Bir kez daha onsuz engelleme; ancak, eşit sayıda Exit aramadan önce çağrılması gerekir başka bir iş parçacığı nesnenin bekliyor engelini kaldırmak olacaktır.

Monitor.Enter yöntemi sonsuz beklerdeğilzaman aşımına.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • Dive In

    Dive In

    17 Temmuz 2013
  • efaustus9

    efaustus9

    16 HAZİRAN 2006