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

  • bombjack2991

    bombjack2991

    29 HAZİRAN 2008
  • FF Radio

    FF Radio

    16 Mayıs 2008
  • ExcelIsFun

    ExcelIsFun

    16 ŞUBAT 2008