paint-brush
30 Günlük .NET Yarışması - 17. Gün: Kilitli Sınıf Aracı Nedir?ile@ssukhpinder
338 okumalar
338 okumalar

30 Günlük .NET Yarışması - 17. Gün: Kilitli Sınıf Aracı Nedir?

ile Sukhpinder Singh4m2024/04/07
Read on Terminal Reader

Çok uzun; Okumak

Geleneksel kilitleme tekniklerinin kullanılması bazen atomik işlemlerde performans darboğazlarına neden olabilir. The.Net, geliştiricilerin çekişmeyi azaltabileceği ve uygulamanın performansını artırabileceği tüm atomik işlemler için "Kilitli" sınıfı adı verilen güçlü bir araç sağlar. 30 Day.Net Challenge, geliştiricileri Interlocked sınıflarının nasıl kullanılacağını öğrenmeye davet ediyor.
featured image - 30 Günlük .NET Yarışması - 17. Gün: Kilitli Sınıf Aracı Nedir?
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item

.Net, geliştiricilerin çekişmeyi azaltabileceği ve uygulamanın performansını artırabileceği tüm atomik işlemler için "Interlocked" sınıfı adı verilen güçlü bir araç sağlar.

giriiş

Çok iş parçacıklı uygulama senaryolarında, geleneksel kilitleme tekniklerinin kullanılması bazen atomik işlemlerde performans darboğazlarına neden olabilir. .Net, geliştiricilerin çekişmeyi azaltabileceği ve uygulamanın performansını artırabileceği tüm atomik işlemler için "Interlocked" sınıfı adı verilen güçlü bir araç sağlar.

Öğrenme hedefleri

  • Kilitlerle ilgili sorun
  • Kilitli sınıfları kullanma

Geliştiriciler için Önkoşullar

  • C# programlama dilinin temel anlayışı

30 Günlük .Net Yarışması

Başlarken

Kilitlerle İlgili Sorunu Anlamak

Geleneksel olarak, birden fazla iş parçacığı paylaşılan bir kaynağa eriştiğinde iş parçacığı güvenliğini sağlamak için geliştiriciler kilitler kullanır. Kilitleme, birden fazla iş parçacığının aynı anda kodun kritik bir bölümüne girmesini önler, böylece aynı anda yalnızca bir iş parçacığının paylaşılan kaynağı değiştirebilmesini sağlar.

 private int _counter; private readonly object _syncRoot = new object(); public void IncrementCounter() { lock (_syncRoot) { _counter++; } }

Yukarıda belirtilen yaklaşım, çekişme adı verilen potansiyel bir performans sorunu riskini ortaya çıkarır; burada birden fazla iş parçacığı aynı anda kilide erişmeye çalıştığında, kilidi başarıyla alan iş parçacığı dışında bunlar beklemeye alınır.

Kilitli Sınıf: Daha İyi Bir Yol

.NET çerçevesi, atomik işlemleri verimli bir şekilde gerçekleştirmek için tasarlanmış System.Threading ad alanının bir parçası olarak Interlocked sınıfını sunar. Atomik işlemler bölünemez; tamamen kesintisiz olarak tamamlanırlar.

 private int _counter; public void IncrementCounter() { Interlocked.Increment(ref _counter); }

Interlocked sınıfı kilit gerektirmediği için geleneksel yaklaşımda belirtildiği gibi çekişme sorununu çözer.

Tam Örnek

Yeni bir sınıf adı IncrementClass ekleyin ve aşağıdaki kod parçacığını ekleyin

 public static class IncrementClass { private static int _counter = 0; /// <summary> /// Outputs /// Counter value: 10 /// </summary> public static void TestIncrementCounter() { // Create an array to hold the tasks Task[] tasks = new Task[10]; // Initialize and start tasks for (int i = 0; i < tasks.Length; i++) { tasks[i] = Task.Run(() => IncrementCounter()); } // Wait for all tasks to complete Task.WaitAll(tasks); Console.WriteLine($"Counter value: {_counter}"); } public static void IncrementCounter() { // Safely increment the counter across multiple threads Interlocked.Increment(ref _counter); } }


Ana yöntemden aşağıdaki gibi çağrı yapın:

 #region Day 17: Increment Class IncrementClass.TestIncrementCounter(); #endregion


Konsol çıkışı:

 Counter value: 10

GitHub'da Kodu Tamamlayın

GitHub — ssukhpinder/30DayChallenge.Net

C# Programlama🚀

C# topluluğunun bir parçası olduğunuz için teşekkür ederiz! Sen ayrılmadan:

Bizi takip edin: Youtube | X | LinkedIn | Dev.to Diğer platformlarımızı ziyaret edin: GitHub