Bir iş parçacığında bir değişmez nesne yeni olduğunda ve ikinci iş parçacığında paylaşıldığında (paylaşılan nesne alanı olarak söyleyin), ikinci iş parçacığı eşitlenmemeli mi?Değişmez nesneye C# içindeki bellek bariyerinden erişilmesi gerekiyor mu?
Thread1:
=========
x = new SomeObject()
Thread2
=========
if (x != null)
x.DoSomething()
x.DoSomething()? Dan önce bir bellek engeli olmalı mı? birinci iş parçacığı içinde x öğesine atamanın ikinci iş parçacığına hiçbir zaman görünmemesi mümkün mü? .NET için güvenli yayın modeli nedir?
ok. .NET için güvenli bir yayınla ilgili bilgi/belge var mı? – drr
Sanırım tam olarak ne yapmak istediğinize bağlı. MSDN'de bir Paralel Patterns kütüphanesine başlangıç noktası olarak bakacağım. Bunun dışında, hemen hemen senkronizasyon ilkellerine sahipsiniz. Ayrıca Joe Duffy'nin web günlüğüne de bakabilirsin. Kilitleme ve paralel veri erişiminin daha ince noktaları hakkında biraz konuşuyor. –
Bunu yazan herhangi bir belgeyi bilmiyorum, ancak güvende olmak için yazma ve okumada bellek çitleri gerekir. Bahsedilen, kilitler, uçucu, Thread.VolatileRead/Write, MemoryBarrier'a yapılan açık çağrılar gibi çeşitli yollardan ulaşabilirsiniz. Daha fazla bilgi için [http://www.albahari.com/threading/part4.aspx#_Memory_Barriers_and_Volatility] adresine bakın. – BrandonAGr