CodeBlanks Logo Icon CodeBlanks

lock deyimi

C# kursu · Uzman · Ders 22/47

lock ile kritik bölge korumasını öğrenirsin.

lock deyimi

lock deyimi, bir kritik bölgeyi (critical section) korur. lock (_sync) { /* sadece bir thread */ } bloğuna aynı anda yalnızca bir thread girebilir; diğerleri bekler.

lock aslında Monitor.Enter ve Monitor.Exit'in kısayoludur. Kilit nesnesi olarak genellikle private readonly object _sync = new(); kullanılır; this veya string kilitlemek tehlikelidir.

lock ve atomiklik

lock, bloğun içindeki kodu atomik yapar; birden fazla thread aynı veriyi aynı anda değiştiremez. Bu, sayaç artırma (counter++), liste ekleme gibi işlemlerde veri yarışını (race condition) önler.

lock maliyetlidir; çok küçük işlerde Interlocked gibi daha hafif alternatifler tercih edilebilir. Doğru tercih, performans ve güvenlik dengesini gözetir.

Uygulama lock ile sayaç artır

private static readonly object _sync = new object(); ve private static int _counter = 0; tanımla. Main'de 2 thread oluştur, her biri lock (_sync) { _counter++; } çağırsın. Thread'leri Join ile bekle. En son Console.WriteLine($"Sayaç: {_counter}"); yaz. (2 thread * 1 artırma = 2 beklenir.)

Örnek çözümü göster
{_counter}");
Örnek çözüm:
using System;
using System.Threading;

class Program
{
    private static readonly object _sync = new object();
    private static int _counter = 0;

    static void Main()
    {
        Thread t1 = new Thread(() => { lock (_sync) { _counter++; } });
        Thread t2 = new Thread(() => { lock (_sync) { _counter++; } });
        t1.Start();
        t2.Start();
        t1.Join();
        t2.Join();
        Console.WriteLine($"Sayaç: {_counter}");
    }
}

Kendini test et

  1. lock kavramlarını eşleştir

    lock (_sync)
    Kritik bölge
    Monitor.Enter
    lock'un temeli
    private readonly object _sync
    Kilit nesnesi
    this (kilitleme)
    Tehlikeli
  2. lock hangi nesneyle kullanılmalıdır?

    • private readonly object
    • this
    • string literal
    • typeof(int)
    Cevabı göster

    private readonly object — Doğru. Özel readonly object en güvenli kilit nesnesidir.

  3. lock deyimini tamamla

    ____ (_sync) { counter++; }
    Cevabı göster
    lock (_sync) { counter++; }

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