DEV Community 👩‍💻👨‍💻

MustafaSamedYeyin
MustafaSamedYeyin

Posted on

Singleton Design Pattern Thread Safe

Eğer lazy singleton kullanıyorsak örneğin aşağıdaki gibi :

refactoring.guru

Yukarıdaki program bu yazı serisinin 1. sindeki örnektir.

Eğer bu programı bir çok thread tarafından kullanacak olursa singleton yapımız bir çok kez örneği alınabilir ve artık singleton olmaktan çıkabilir.

Bunu önlemenin en iyi yöntemi lock kullanmaktır.

Safe Singleton :

Lock kullanmamızın sebebi nesnenin sadece ilk thread tarafından null check inin yapılmasından sonra if içerisine girip objeyi create etmek istememizdir.

Örnek Kod Burada

Yukarıdaki örnek kodda singleton nesnesi iki kere if ile null kontrolu yapılmıştır. Bunu sebebi performans'ı artırmaktır. double check locking optimization

Kodları inceleyip denemeler yapmanızı rica ediyorum.

Note : Safe singleton anlatması biraz zor eğer yorum yazar şurayı anlamadım tarzı geri bildirimlerde bulunursanız yazıyı daha açıklayıcı hal getirmeye zaman çalışcağım.

İkinci olarak volatile keyword'ü kullanılmasının sebebi bazı durumlarda lock kırılabilir (çok nadir de olsa) thread'ler sıralanırken. Bazı durumlarda lock kırılabilir thread'ler senkronize olması gecikir ve hala daha bir thread null kontrolü yapıldıktan sonra diğer thread ler girebilir null kontorollerinin içerisinde ve yeni nesne oluşturabilir. Tabi bu çok sık yaşanmıyor ama yine de safe'de kalmak önemli.

Oldest comments (0)

🌚 Friends don't let friends browse without dark mode.

Sorry, it's true.