.Net Framework ün bize sunduğu güvenlik prensipleri sadece system.security sınıfına bağlı değildir.Daha önceki makalelerimdede söylediğim gibi .net güvenliği clr içerisinde sağlanır ve iç yapısında yansıma,metaveri,serileştirme yapıları mevcuttur.Bugün Threading uygulama ile system.monitor sınıfını kullanarak kod bütünlüğümüzü nasıl koruruz onu göreceğiz.
System.Monitor sınıfı sinyaller,alarmlar ve kilitler yardımı ile kod bütünlüğünde serileştirmeyi sağlar.Örnek vericek olursak örneğin veritabanı işlemlerimizde veritabanımızı güncellerken kod yavaşlığı ve bütünlükte tehlike vardır.Yada birden fazla threading programlama yapısı kullanırken yine yavaşlık olur.İşte bu gibi durumlarda System.Monitör sınıfı devreye girdiği zamanlarda programda yavaşlık,aksalık,kod çakışması gibi olaylar ortadan kalkıyor.Böylelikle ortaya çıkan ürünün yazılım güvenliğinide sağlamış oluyorsunuz.
Şimdi bunula ilgili ilk verdiğimiz veritabanı örneğine uygun bir uygulama yapalım.Yapacağımız uygulama console üstünden çalışsın ve veritabanına kayıt yapan bir çok parçacıklı programlama gövdesi olsun.Bu programda Monitor kullanarak verimi ve güvenliği yüksek seviyeye çıkartalım.
using System;
using System.Threading;
class Database
{
public void SaveData(string text)
{
Monitor.Enter(this);
Console.WriteLine("Database.SaveData - Started");
Console.WriteLine("Database.SaveData - Working");for (int i = 0; i < 100; i++)
{
Console.Write(text);
}
Console.WriteLine("\nDatabase.SaveData - Ended");
Monitor.Exit(this);
}
}
class ThreadMonitor2App
{
public static Database db = new Database();public static void WorkerThreadMethod1()
{
Console.WriteLine("Worker thread #1 - Started");
Console.WriteLine("Worker thread #1 - Calling Database.SaveData");db.SaveData(
"x");Console.WriteLine("Worker thread #1 - Returned from Output");
}
public static void WorkerThreadMethod2()
{
Console.WriteLine("Worker thread #2 - Started");
Console.WriteLine("Worker thread #2 - Calling Database.SaveData");db.SaveData(
"o");Console.WriteLine("Worker thread #2 - Returned from Output");
}
public static void Main()
{
ThreadStart worker1 = new ThreadStart(WorkerThreadMethod1);
ThreadStart worker2 = new ThreadStart(WorkerThreadMethod2);
Console.WriteLine("Main - Creating worker threads");
Thread t1 = new Thread(worker1);Thread t2 = new Thread(worker2);
t1.Start();
t2.Start();
}
}
Görüldüğü gibi yapılacak şey çok basit.Parçacıklı programlamada veritabanının gövdesini oluşturan yapıda sadece kök bölümü monitör içine alıyoruz.Başlatıyoruz ve kapatıyoruz.Bu uygulamayı sadece kaydetme aşamasında yane kök aşamasında yaptım çünkü güvensizliğin,verimsizliği ve yavaşlığın olacağı blok o kod bloğudur.
Son Söz:
Monitor sınıfı ile parçacıklı programlamada kod bütünlüğünün serileştirilmesini sağlayarak yazılımın verimini,hızlı çalışmasını ve güvenliğini sağladık.Enter nesnesiyle başlattığımız monitor sınıfı bir başka enter nesnesi görene kadar veya exit nesnesini görene kadar kodu kilitler ve sinyal aşamasına getirir.Monitor sınıfının profesyonel kodlamada çok önemli bir etken olduğunu ve güvenlikte sadece security sınıfına bağlı kalmamız gerektiğini görmüş olduk.Bir sonraki makaleye kadar sağlıklı ve mutlu günler dilerim.
Saygı ve Sevgilerimle