SORU
12 ŞUBAT 2009, PERŞEMBE


C# java'senkronize anahtar kelime s?

Yok c# java kendi sürümü "" anahtar kelime? senkronize var

I. e. java gibi bir işlevi, bir nesne ya da bir kod bloğu ya: belirtilebilir

public synchronized void doImportantStuff() {
   // dangerous code goes here.
}

ya

public void doImportantStuff() {
   // trivial stuff

   synchronized {
      // dangerous code goes here.
   }
}

CEVAP
12 ŞUBAT 2009, PERŞEMBE


Birinci sınıflar en güvenli iş parçacığı olması gerekir. YAGNI: aslında sadece sen (ve sınamak) kullanacaksın biliyorum iplik-güvenlik uygulamak.

Yöntem düzey şeyler için, [MethodImpl] vardır:

[MethodImpl(MethodImplOptions.Synchronized)]
public void SomeMethod() {/* code */}

Bu da erişenleri (özellikler ve olaylar için kullanılabilir:

private int i;
public int SomeProperty
{
    [MethodImpl(MethodImplOptions.Synchronized)]
    get { return i; }
    [MethodImpl(MethodImplOptions.Synchronized)]
    set { i = value; }
}

Tarla gibi olayları unutmayınotomatik uygulanan özellikler . varsayılan olarak senkronize, ^em>değildir:

public int SomeProperty {get;set;} // not synchronized
public event EventHandler SomeEvent; // synchronized

Şahsen, this ya karşı olan typeof(Foo) - en iyi uygulamaları kilitler MethodImpl uygulanması sevmiyorum. Tercih edilen seçenek, kendi kilitleri kullanmak için:

private readonly object syncLock = new object();
public void SomeMethod() {
    lock(syncLock) { /* code */ }
}

Not Bu iş için saha gibi olaylar, kilitleme uygulamasıdır bağımlı derleyici; eski Microsoft Derleyiciler bir lock(this) / lock(Type) - ancak, in more recent compilers it uses Interlocked güncellemeler - iplik-güvenli olmayan kötü bir parça.

Bu daha ayrıntılı bir kullanım sağlar veMonitor.Wait/Monitor.Pulse vb kullanımı konuları arasında iletişim kurmasını sağlar.

İlgili blog entry (daha sonra revisited).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • xCraash

    xCraash

    6 Temmuz 2012