Burada sadece bir soru sordunuz ama sormanız gereken bir düzine kadar soru var, bu yüzden hepsini cevaplayacağım.
İşte varsaydığım sıra
- Sınıf yapıcısının başlangıcı (aynı zamanda olarak da bilinir
cctor
)
- Cctor sonu
- Ana Başlangıcı
- MyMethod'un başlangıcı
Bu doğru mu?
Hayır. Doğru sıra:
- Varsa Program için cctor başlangıcı. Yok.
- Varsa Program için cctor sonu. Yok.
- Ana Başlangıcı
- MyClass için cctor başlangıcı
- MyClass için cctor sonu
- MyClass.MyMethod başlangıcı
Ya statik bir alan başlatıcı varsa?
CLR'nin, bazı durumlarda statik alan başlatıcılarının çalıştığı sırayı değiştirmesine izin verilir. Ayrıntılar için konuyla ilgili Jon'un sayfasına bakın:
Statik oluşturucular ve tür başlatıcılar arasındaki farklar
Bu MyMethod
sınıfın cctoru tamamlanmadan önce çağrılması gibi statik bir yöntemin olması mümkün mü ?
Evet. Eğer cctor kendisi MyMethod'u çağırırsa, belli ki, cctor tamamlanmadan önce MyMethod çağrılacaktır.
Bilgi sahibi, MyMethod'u çağırmaz. MyMethod
MyClass'ın cctoru tamamlanmadan önce çağrılması gibi statik bir yöntemin olması mümkün mü ?
Evet. Cctor, Cctor MyMethod'u çağıran başka bir tür kullanıyorsa, MyClass cctor tamamlanmadan önce MyMethod çağrılacaktır.
Hiçbir uzman, doğrudan veya dolaylı olarak MyMethod'u çağırmaz! Şimdi, MyMethod
MyClass'ın cctoru tamamlanmadan önce çağrılması gibi statik bir yöntem mümkün mü?
Hayır.
Birden fazla iş parçacığı olsa bile bu hala doğru mu?
Evet. Statik yöntem herhangi bir iş parçacığında çağrılmadan önce cctor bir iş parçacığında bitirecektir.
Görevli birden fazla aranabilir mi? İki iş parçacığının her ikisinin de cctor'un çalışmasına neden olduğunu varsayalım.
Cctor, kaç iş parçacığı dahil olursa olsun, en fazla bir kez çağrılacağı garantilidir. İki iş parçacığı "aynı anda" MyMethod'u çağırırsa, yarışırlar. Bunlardan biri yarışı kaybeder ve MyClass cctor kazanan iş parçacığını tamamlayana kadar bloklar.
Kaybetme iplik blokları cctor kadar yapılır? Gerçekten mi?
Gerçekten mi.
Peki ya kazanan iş parçacığındaki cctor , kaybeden iş parçacığı tarafından daha önce alınan bir kilidi engelleyen kodu çağırırsa ?
O zaman klasik bir kilit sırası ters çevirme koşuluna sahipsiniz. Programınız kilitleniyor. Sonsuza dek.
Bu tehlikeli görünüyor. Çıkmazdan nasıl kaçınabilirim?
Bunu yaptığında canın yanarsa, o zaman yapmayı bırak . Asla bir cctor'u engelleyebilecek bir şey yapma.
Karmaşık güvenlik gereksinimlerini uygulamak için cctor başlatma semantiğine güvenmek iyi bir fikir mi? Ve kullanıcı etkileşimlerini gerçekleştiren bir uzmana sahip olmak iyi bir fikir mi?
İyi fikirler de değil. Benim tavsiyem, yöntemlerinizin güvenliği etkileyen ön koşullarının karşılanmasını sağlamak için farklı bir yol bulmanız gerektiğidir.