SORU
12 ŞUBAT 2011, CUMARTESİ


Monitör vs kilit

Monitor veya C sınıfı iş güvenliği lock anahtar kelime ya da kullanmak için uygun mu#?

DÜZENLEME: Cevapları lock Monitor sınıfı çağrıları bir dizi için kısa eldir o kadar uzak görünüyor. Tam olarak kilit kısa el için çağrı nedir? Ya da daha açık bir şekilde,

class LockVsMonitor
{
    private readonly object LockObject = new object();
    public void DoThreadSafeSomethingWithLock(Action action)
    {
        lock (LockObject)
        {
            action.Invoke();
        }
    }
    public void DoThreadSafeSomethingWithMonitor(Action action)
    {
        // What goes here ?
    }
}

Güncelleme

Tüm yardımınız için teşekkür ederim : tüm bilgilerin bazı kadar izleyin. başka bir soru attılar Bu alanda tecrübeli olduğunu gördüğüm için, bağlantı attılar: What is wrong with this solution to locking and managing locked exceptions?

CEVAP
12 ŞUBAT 2011, CUMARTESİ


Eric onun blog bu konuda görüşmeler Lippert: Locks and exceptions do not mix

Eşdeğer kod C# 4.0 ve önceki sürümleri arasında farklılık gösterir.


C# 4.0.

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

Monitor.Enter atomik kilidi alındığında bayrak ayarı kullanır.


Ve daha önce:

var temp = obj;
Monitor.Enter(temp);
try
{
   body
}
finally
{
    Monitor.Exit(temp);
}

Bu istisna Monitor.Enter try arasında atılan dayanır. Hata ayıklama kodu bu durum derleyici aralarında bir NOP eklenen ve böylece olanlar arasında kürtaj iplik mümkün kıldı, çünkü ihlal olduğunu düşünüyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • parlophone

    parlophone

    28 ŞUBAT 2006
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008