Setelah .NET 4.0, jenis pemuatan lambat yang aman disediakan di .NET FrameworkMalas Lazy mampu beroperasi di lingkungan multi-threaded, dijaminNilai DapatkanFungsi ini dijalankan hanya sekali, sehingga mengimplementasikanMode singleton
Di masa lalu, kami menggunakan kunci penilaian kuadrat untuk mengimplementasikan pola singleton, atau untuk memanfaatkan fungsi inisialisasi statis kelas Dengan tipe Malas, proses ini disederhanakan dan kinerjanya lebih baik
Ketika Lazy dibuat, Anda dapat menentukan mode instalasi utas, saat ini ada dua mode,Publikasi Saja,Ekskusi dan Publikasi
Mode Publikasi Saja
1. Jalankan fungsi inisialisasi dan kotakkan ke dalam internalPetiketik, selesaikan masalah penilaian nilai null, jika kasus telah dibuat, itu akan mengembalikan null,Prosesnya tidak aman
2. Tentukan apakah m_boxed kosong, m_boxed bidang disimpan berdasarkan nilai, jika sama dengan kosong, diatur ke kotak, metode ini dapat memastikan atomisitas,Prosesnya aman untuk ulir
3. Jika CreateValue mengembalikan kosong, itu berarti bahwa utas lain telah membuat instans, lalu diatur ke instans yang sudah dibuat
4. Tandai metode inisialisasi sebagai inisialisasi, yang biasanya terjadi dalam kasus eksekusi bersamaan, dan jalankan CreateValue beberapa kali
Publikasi Sajadigunakan berdasarkanSaling Terkait.Bandingkan Pertukaran, kelas ini berisi metode atomisitasCAS (Bandingkan dan tukar)
CAS diimplementasikan menggunakan instruksi atom yang disediakan oleh CPU, dan versi runtime yang berbeda mungkin memiliki implementasi yang berbeda Implementasi spesifik yang saling terkait Dalam metode asli, teman yang tertarik dapat memeriksa implementasi spesifik melalui kode coreclr/jvm
Dalam mode ini,Fungsi singleton dapat berjalan beberapa kali, tetapi pada akhirnya dijamin hanya satu instance yang akan diperoleh
Mode ExcutionDanPublikasi
Ekskusi dan Publikasimode yang digunakan dalam modeVolatile+Monitor,MonitorItu adalahkunciImplementasi pernyataan, implementasi Monitor dalam kode asli, adalah kunci kelas berat
MonitorAntrean dan thread sleep didukung, yang dapat memastikan bahwa seluruh blok metode dijalankan dalam status threaded tunggal
Tautan asli:Login hyperlink terlihat. |