2012-12-14 15 views
5

C# /. NET 4.0'ın kullanılması, Lazy<T> nesnesinin aşağıdaki gibi bildirilebilir. LazyThreadSafetyMode sıralamadanSystem.Lazy <T> ve System.Threading.LazyThreadSafetyMode Numaralandırması

using System; 
using System.Threading; 
... 
var factory =() => { return new object(); }; 
var lazy = new Lazy<object>(factory, LazyThreadSafetyMode.ExecutionAndPublication); 

Diğer seçenekler PublicationOnly ve None bulunmaktadır.

Neden hiç ExecutionOnly seçeneği yoktur?

bu durumda davranış birden çok iş parçacığı lazy.Value elde etmeye çalışmak bile, fabrika yöntemi tek bir iş parçacığı tarafından en fazla bir kere denir olurdu. fabrika yöntemi tamamlanmış ve tek sonuç önbelleğe sonra, bir çok parçacığı eşzamanlı olarak lazy.Value erişmek mümkün olur (yani, ilk fabrika yöntemi sonra bir iplik güvenlik).

cevap

8

Tarif ettiğiniz davranış etkili bir LazyThreadSafetyMode.ExecutionAndPublication olduğunu. Bu birden çok iş parçacığı hiç başlatma yöntemini çalıştırmak için Value, ancak yalnızca tek bir iş parçacığı erişmesini sağlar.

Bu numaralandırma üretimi gerçekleşmez nasıl belirlenmesinden tek başına - eğer hep birden çok iş parçacığı Value erişebilirsiniz.

İlgili konular