C# ile Bir Dosyaya Birden Fazla Uygulama Üzerinden Eş Zamanlı Olarak Erişmek

İlker Erhalim
1 min readJan 6, 2021

--

Klasik işletim sistemlerinde bir kaynak T zamanda yalnızca bir process tarafından kullanılabilinir, ancak yazılım geliştirirken aynı dosyaya farklı threadler içerisinde, hatta aynı dosyaya farklı uygulamalar üzerinden erişmeye ihtiyacımız olabilir, bu yazımda Mutex sınıfını kullanarak farklı uygulamalar üzerinden aynı dosyaya güvenli bir şekilde erişmekten bahsedeceğim.

İçeriğe başlamadan önce Mutex ve diğer Task senkronizasyon yöntemleri hakkında temel bilgiler için bir önceki yazımı okuyabilirsiniz.

Diyelim ki iki adet uygulamamız var, bunlardan biri bir dosyaya sürekli log yazarken diğeri aynı dosyadaki loglara erişip okuma işlemli yapıyor. Bu iki uygulama bir süre hata vermeden çalışabilir.(Tesadüfen aynı anda dosyaya erişmeyi denemezlerse) Ancak bir süre sonra aynı anda aynı dosyaya erişmeye çalıştıklarında birinden System.IO.IOException fırlayacaktır, bunun sebebi erişilmek istenen dosyanın diğer uygulama tarafından kullanılmasıdır.

Yukarıdaki örnek 10 milisaniyede bir User/Temp klasöründeki examplelog.txt üzerinde bir yazma işlemi yapıyor.

Bu örnek ise 1 saniyede bir logları okuyup ekrana yazıyor.

Doğru koşullar sağlandığında bir süre uygulamarın ikisi de sağlıklı bir şekilde çalışsa da günün sonunda ikisinden birinde System.IO.Exception fırlaması kaçınılmazdır.

Bu durumu önlemenin temel yolu uygulamalar bağımsız çalışsa da herhangi bir dosyaya erişirken diğerinin beklemeye alınmasıdır. Bunu yapmanın en kolay yolu Mutex kullanmaktır.

İki uygulamaya da yukarıdaki gibi Mutex implementasyonu yapıldığında uygulamalar dosyaya erişim için diğer uygulamaların dosyayı kapatmasını (Mutexi salmalasını) bekleyeceklerdir.

--

--

No responses yet