SORU
27 Temmuz 2009, PAZARTESİ


Kilitli ve uçucu

Devleti temsil etmek için kullanıyorum hangi bir değişken var. Okuma ve birden çok iş parçacığı için yazılmış olabilir.

Interlocked.Exchange Interlocked.CompareExchange değiştirmek için kullanıyorum. Ancak birden çok iş parçacığı onu okuyorum.

volatile değişken yerel olarak önbelleğe ama her zaman doğrudan bellekten okur emin olmak için kullanılabilir olduğunu biliyorum.

Ancak eğer değişken uçucu kurdum sonra uçucu kullanma hakkında bir uyarı oluşturur ve kullanarak geçen Kilitli yöntemleri için ref.

Her iş parçacığı değişkenin en son değerini ve bazı önbelleğe alınan sürüm değil okuma emin olmak istiyorum, ama uçucu kullanamam.

Interlocked.Read var ama 64 bit türleri ve kompakt çerçeve mevcut değildir. Bu belgeleri zaten tek bir işlemle yapılmaktadır olarak 32 bit türleri için gerekli olmadığını söylüyor.

Eğer tüm erişim için Kilitli yöntemleri kullanıyorsanız uçucu gerekmez ifadeleri internet üzerinden yapılır. Ancak tüm erişim için Kilitli yöntemleri kullanabilirsiniz yolu yok yani 32 bit bir değişken Kilitli yöntemleri kullanarak okuyabilirsiniz.

Bir şekilde güvenli iş parçacığı okuma gerçekleştirmek ve kilit kullanmadan benim değişken yazma var mı?

CEVAP
27 Temmuz 2009, PAZARTESİ


Güvenli bir şekilde her zaman uçucu işlemleri çünkü Interlocked.Xxx fonksiyonlar (this question) kullanırken bu uyarıyı göz ardı edebilirsiniz. ** 5 değişken paylaşılan durum için mükemmel TAMAM. Uyarı kurtulmak ne pahasına olursa olsun istiyorum, gerçektenolabilirInterlocked.CompareExchange (ref counter, 0, 0) mevcut okuma yapmak.

Düzenleme:Aslında, devlet volatile değişken gerekirsadecedoğrudan yazmak için (yani Interlocked.Xxx kullanmadan) gidiyoruz. 10* *bir değişken (veya değişken) kilitli bir operasyon ile güncellenen okur en son değeri kullanır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • MVLV28

    MVLV28

    17 Mart 2008
  • SunsetTrance

    SunsetTrance

    20 EYLÜL 2008