Tautan MS:Login hyperlink terlihat.
Kata kunci volatile menunjukkan bahwa bidang dapat dimodifikasi oleh beberapa utas yang dijalankan secara bersamaan. Bidang yang dinyatakan sebagai volatil tidak dibatasi oleh pengoptimalan kompiler (dengan asumsi diakses oleh satu utas). Ini memastikan bahwa bidang dirender dengan nilai terbaru setiap saat.
Pengubah volatil biasanya digunakan untuk bidang yang diakses oleh beberapa utas tetapi tidak menserialisasikan akses menggunakan pernyataan kunci.
Kata kunci volatil dapat diterapkan ke jenis bidang berikut:
- Jenis kutipan.
- Jenis penunjuk (dalam konteks yang tidak aman). Perhatikan bahwa meskipun penunjuk itu sendiri dapat berubah, objek yang diarahkannya tidak dapat diubah. Dengan kata lain, "penunjuk ke objek yang dapat diubah" tidak dapat dideklarasikan.
- jenis seperti sbyte, byte, short, ushort, int, uint, char, float, dan bool.
- Jenis enum dengan salah satu jenis dasar berikut: byte, sbyte, short, ushort, int, atau uint.
- Parameter jenis generik yang dikenal sebagai jenis referensi.
- IntPtr dan UIntPtr.
Kata kunci variabel hanya dapat diterapkan ke bidang kelas atau struktur.Variabel lokal tidak dapat dinyatakan sebagai volatile。
Tidak ada lagi omong kosong, tulis loop untuk mengujinya:
Mari kita uji 10.000 kali dalam satu lingkaran,menemukan bahwa output nilai adalah benar, tetapi,Itu tidak menjelaskanvolatile aman untuk benangKarena, jika Anda mengujinya berkali-kali, Anda akan menemukan bahwa akan ada kesalahan perhitungan! Karena ada kemungkinan hasil yang benar dan kemungkinan hasil yang salah
Kode:
Mari kita uji 100.000 loop lagi, dan kita dapat menemukan bahwa nilai a salah, karena semakin kecil jumlah loop, semakin kecil kemungkinan kesalahan, dan kesalahannya tidak begitu jelas, sama seperti tidak ada kesalahan setelah 10.000 loop barusan.
Pada saat ini, kami menambahkan kunci untuk menguji, dan dapat dilihat bahwa nilai a dihitung dengan benar seperti yang kami harapkan.
Kode:
Ringkasan: volatil tidak menjamin keamanan ulir, seperti yang Anda lihat pada contoh di atas.
|