CodeBlanks Logo Icon CodeBlanks

ConcurrentQueue

C# kursu · Uzman · Ders 26/47

ConcurrentQueue ile iş parçacığı güvenli kuyruğu öğrenirsin.

ConcurrentQueue

ConcurrentQueue<T>, iş parçacığı güvenli ilk-giren-ilk-çıkar (FIFO) kuyruğudur. Birden çok iş parçacığı aynı anda Enqueue ve TryDequeue çağırabilir; içerik kilitlenmeden tutarlı kalır.

Arka planda kilit gerektirmeyen (lock-free) bir bağlı liste kullanır. Üretici-tüketici senaryolarında, iş parçacıkları görevleri kuyruğa ekler ve havuzdan çıkarır.

TryDequeue ve TryPeek

TryDequeue(out T item) kuyruğun başından bir öğe çıkarır ve true döndürür; kuyruk boşsa false döner, exception fırlatmaz. Bu, boş kuyruğu güvenle yoklamanın yoludur.

TryPeek(out T item) ise öğeyi çıkarmadan başa bakar. Döngüde while (queue.TryDequeue(out var x)) ile tüm öğeleri sırayla boşaltabilirsin.

Uygulama Kuyruğa ekle ve boşalt

Aşağıdaki queue boş. Enqueue ile üç öğe ekle: "a", "b", "c". Sonra while (queue.TryDequeue(out var item)) döngüsüyle her öğeyi Console.WriteLine(item) ile yazdır.

Örnek çözümü göster
queue.Enqueue("a"); queue.Enqueue("b"); queue.Enqueue("c"); Sonra while (queue.TryDequeue(out var item)) Console.WriteLine(item);
Örnek çözüm:
using System;
using System.Collections.Concurrent;

class Program
{
    static void Main()
    {
        var queue = new ConcurrentQueue<string>();
        queue.Enqueue("a");
        queue.Enqueue("b");
        queue.Enqueue("c");
        while (queue.TryDequeue(out var item))
        {
            Console.WriteLine(item);
        }
    }
}

Kendini test et

  1. Enqueue çağrısını tamamla

    queue.____;
    Cevabı göster
    queue.Enqueue("görev");
  2. ConcurrentQueue'den öğe çıkarmak için hangi metot kullanılır?

    • Pop
    • Remove
    • Take
    • TryDequeue
    Cevabı göster

    TryDequeue — Doğru. TryDequeue baştaki öğeyi güvenle çıkarır.

  3. Kuyruk metotlarını eşleştir

    Enqueue
    Kuyruğun sonuna ekle
    TryDequeue
    Baştan çıkar
    TryPeek
    Çıkarmadan başa bak

Uzman bölümündeki tüm dersler