C # ‘ ta Thread Safety nedir?

merve
2 min readSep 26, 2022

--

Thread -basitçe- aynı anda birden fazla görevi gerçekleştirmektir. Yazdığımız kodlar senkron ya da asenkron olarak yönetilir. Bir kodun senkron çalışması art arda, birbirini takip ederek çalışması demektir. Asenkron olarak çalışması ise paralel bir yapıda, aynı anda çalışması demektir. Threading kullanarak aynı anda birden fazla görevi yapabiliriz.

Thread Safety, aynı anda birden çok iş parçacığı(thread) tarafından bir kod parçasının güvenli bir şekilde kullanılmasını garanti edecek şekilde paylaşılan veri yapısını manipüle eden tekniktir. Birden çok threadde bir nesnenin anormal davranışını kontrol etmek, thread safety (iş parçacığı güvenliği) olarak bilinir. Anormal davranışa örnek vermek gerekirse:

Bir tam sayı değişkeninin rastgele atanan bir değere bölünme işlemi ve bölenin her seferinde 0'a eşitlenmesi durumuna bakalım.

Bu işlem boyunca number’a iki süreç atak yapıyor görüldüğü üzere ve bu değişken davranışı kontrol edilemez. DividingByZeroException hatası oluşturması mümkündür. Ki bu hata oluşursa, bu iş parçacığının(thread’in) güvenli olmadığı anlamına gelir. Bu hatayı yukarıda gördüğünüz gibi aldık çünkü Main methodunda iki thread meydana geldi ve her ikisi de bölme işlemini çağırıyor, bu nedenle burada bu hatayı patlattı.

Bu hatadan kurtulmak için uygun thread senkronizasyon tekniğine ihtiyacımız var. Bunlar “Lock”, “Semaphore” ve “Mutex”.

Lock: Tek seferde yalnızca bir thread lock tutabilir. Bir thread, başka bir thread tarafından tutulan bir lock’ı almaya çalışırsa, lock serbest bırakılana kadar beklemesi gerekir. Yukarıdaki örnek için de lock kullanırsak bu hatayı almaktan kurtulmuş olacağız. Şöyle ki:

Sonuç olarak uygulamamızın crash olmaması için thread-safety tekniklerini uygulamanın önemi açık. Lock dışında Mutex, Semaphore gibi bir çok başka yöntem de mevcut.

--

--

No responses yet