0Pricing
C# Academy · Ders

ConcurrentDictionary<T> ve değişmez koleksiyonlar

İş parçacığı güvenli güncellemeler için ConcurrentDictionary kullanın; salt okunur görünümleri ve kopyalayarak yazma yaklaşımını içeren basit değişmezlik yöntemlerini öğrenin.

ConcurrentDictionary<T> ve değişmez koleksiyonlar, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.

İş parçacığı güvenliği ve değişmezlik temelleri

Bugün:

  • ConcurrentDictionary<TKey,TValue>: birden çok iş parçacığından güvenli güncellemeler
  • Salt okunur görünümler ve gerçek değişmezlik arasındaki fark
  • Basit güvenlik için yazma sırasında kopyalama fikri

Atomik işlemler: GetOrAdd/AddOrUpdate

Atomik işlemler için GetOrAdd ve AddOrUpdate, güvenli okuma için TryGetValue kullanın.

using System;
using System.Collections.Concurrent;

public class Program
{
  public static void Main(string[] args)
  {
    ConcurrentDictionary<string, int> counts = new ConcurrentDictionary<string, int>();

    // Add if missing
    int a = counts.GetOrAdd("apple", 0); // 0
    // Increment safely
    int newVal = counts.AddOrUpdate("apple", 1, (key, oldValue) => oldValue + 1);

    Console.WriteLine("apple was " + a + ", now " + newVal);

    int value;
    bool ok = counts.TryGetValue("apple", out value);
    Console.WriteLine("Has apple? " + ok + " -> " + value);
  }
}

Yarışsız artırma fikri

AddOrUpdate, atomik güncelleme yaparak klasik okuma-değiştirme-yazma yarışını önler.

using System;
using System.Collections.Concurrent;

public class Program
{
  static int Inc(int oldValue) { return oldValue + 1; }

  public static void Main(string[] args)
  {
    ConcurrentDictionary<string, int> clicks = new ConcurrentDictionary<string, int>();

    // Simulate multiple updates
    for (int i = 0; i < 5; i++)
    {
      clicks.AddOrUpdate("home", 1, delegate(string k, int v) { return Inc(v); });
    }

    Console.WriteLine("home clicks = " + clicks["home"]); // 5 (starting at 1 then +4)
  }
}

Salt okunur görünüm (değişmez değil)

AsReadOnly, gerçek anlamda değişmez bir koleksiyon değil, salt okunur bir görünüm döndürür: kaynakta yapılan değişiklikler görünümde görünür.

using System;
using System.Collections.Generic;

public class Program
{
  public static void Main(string[] args)
  {
    List<string> items = new List<string>(new string[] { "A", "B" });
    var ro = items.AsReadOnly(); // ReadOnlyCollection<string>

    foreach (string s in ro) Console.WriteLine(s); // A, B

    // ro.Add("C"); // not available: read-only view has no Add

    // But changing the source list reflects in the view:
    items.Add("C");
    Console.WriteLine("After source change:");
    foreach (string s in ro) Console.WriteLine(s); // A, B, C
  }
}

Yazma sırasında kopyalama anlık görüntüsü

Yazma sırasında kopyalama: değişiklikler için yeni bir liste döndürün. Eski listeyi elinde tutan çağıran kod, sabit bir anlık görüntü görür.

using System;
using System.Collections.Generic;

public class Program
{
  static List<int> AddWithoutTouchingOriginal(List<int> original, int item)
  {
    // create a copy and modify the copy
    List<int> copy = new List<int>(original);
    copy.Add(item);
    return copy;
  }

  public static void Main(string[] args)
  {
    List<int> a = new List<int>(new int[] { 1, 2 });
    List<int> b = AddWithoutTouchingOriginal(a, 3);

    Console.WriteLine("Original:");
    foreach (int x in a) Console.WriteLine(x); // 1,2

    Console.WriteLine("Copy:");
    foreach (int x in b) Console.WriteLine(x); // 1,2,3
  }
}

İpuçları ve ödünler

İpuçları:

  • Paylaşılan sayaçlar ve önbellekler için ConcurrentDictionary kullanın.
  • AsReadOnly, tüketicilerin yanlışlıkla değişiklik yapmasını önler.
  • Sabit bir görünüm için değiştirmeden önce listeyi kopyalayın.
  • Gerçek değişmez koleksiyonlar System.Collections.Immutable paketinde bulunur; kodu bağımsız tutmak için burada kullanılmamıştır.

İş parçacığı güvenli sözlük seçimi

Kısa kontrol: Harici kilitler olmadan iş parçacığı güvenli ekleme ve güncellemeleri hangi koleksiyon destekler?

Özet

Özet: Eşzamanlı güncellemeler için ConcurrentDictionary kullanın. Çağıran koda salt okunur görünümler sunun; sabit anlık görüntülere ihtiyaç duyduğunuzda yazma sırasında kopyalama yaklaşımını kullanın.

Sıkça Sorulan Sorular

“ConcurrentDictionary<T> ve değişmez koleksiyonlar” dersi ücretsiz mi?

Evet — “ConcurrentDictionary<T> ve değişmez koleksiyonlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.

“ConcurrentDictionary<T> ve değişmez koleksiyonlar” dersinde ne öğreneceğim?

İş parçacığı güvenli güncellemeler için ConcurrentDictionary kullanın; salt okunur görünümleri ve kopyalayarak yazma yaklaşımını içeren basit değişmezlik yöntemlerini öğrenin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 2. dersidir.

“ConcurrentDictionary<T> ve değişmez koleksiyonlar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. HashSet , SortedSet , Queue , Stack
  2. ConcurrentDictionary ve değişmez koleksiyonlar
  3. Eşitlik ve özetleme (değer ve başvuru)
← C# Academy Sayfasına Dön