C++ yang mudah menguap

C Yang Mudah Menguap



“Pengembang aplikasi ruang pengguna harus selalu merujuk manual kompiler yang relevan untuk mempelajari bagaimana qualifier dapat ditangani dalam berbagai konteks karena perilaku kata kunci yang mudah menguap biasanya harus dilihat sebagai bergantung pada perangkat keras. Saat sebuah objek ditandai sebagai volatile, compiler sering diberi tahu bahwa objek tersebut tidak boleh dioptimalkan untuk operasi pemuatan dan harus selalu diambil dari memori utama, bukan dari register atau cache. Namun, ketika kompiler mencoba untuk memasukkan lokasi memori ke dalam register, itu akan di-cache secara otomatis meskipun ada banyak tingkatan cache yang sebagian besar tidak tersedia untuk perangkat lunak dan hanya dipertahankan di perangkat keras. Akibatnya, RAM dapat diakses berkali-kali lebih cepat dari jalur cache di dekat CPU daripada dari lokasi memori yang sama.

Masalah dapat terjadi jika kami tidak menggunakan qualifier volatil yang mencakup, saat pengoptimalan diaktifkan, kode mungkin tidak berfungsi seperti yang diharapkan. Ketika interupsi digunakan dan diaktifkan, kode tidak dapat berfungsi seperti yang direncanakan. Data hanya disimpan dalam penyimpanan yang mudah menguap saat daya menyala. Ketika pasokan dihapus, kehilangan data terjadi.

Namun, penyimpanan non-volatil menyimpan data meskipun listrik padam. Informasi proses disimpan secara singkat pada penyimpanan yang mudah menguap karena jauh lebih cepat daripada penyimpanan yang tidak mudah menguap. Berbeda dengan penyimpanan non-volatile, penyimpanan volatile lebih cocok untuk melindungi data sensitif. Ini karena data tidak dapat diakses saat catu daya dimatikan. Penyimpanan volatil membutuhkan biaya besar karena sistem komputer hanya dapat menampung beberapa MB hingga beberapa GB saja.”







Sifat-sifat Volatile Qualifier di C++

Cara kualifikasi volatil C++ akan ditunjukkan di sini. Saat kita mendeklarasikan sebuah variabel, qualifier “volatile” diterapkan. Ini berfungsi sebagai pengingat bagi kompiler bahwa nilainya dapat berubah setiap saat. Volatilitas memiliki beberapa ciri yang tercantum di bawah ini.



• Penetapan memori tidak dapat diubah dengan kata kunci volatil.



• Variabel register tidak dapat di-cache.





• Dalam hal penugasan, nilainya tidak dapat diubah.

Penggunaan Volatile Qualifier di C++

1. Meskipun kode Anda tidak mengubah nilai variabel, tetap saja mungkin melakukannya. Akibatnya, setiap kali kompiler memeriksa status variabel, ia tidak dapat berasumsi bahwa itu sama dengan nilai terbaru yang dibaca darinya atau nilai terbaru yang disimpan; sebaliknya, ia harus memperoleh nilai variabel sekali lagi.



2. Compiler tidak diperlukan untuk menghilangkan tindakan menyimpan nilai karena itu adalah 'efek samping' yang dapat dilihat dari luar dan terjadi ketika nilai disimpan dalam variabel volatil. Misalnya, jika dua nilai ditempatkan dalam satu baris, kompiler harus memasukkan nilai dua kali.

Sintaks Volatile Qualifier di C++

# Nama_variabel tipe data yang mudah menguap

Kata kunci volatil harus digunakan dalam deklarasi, dan tipe data mengacu pada tipe data apa pun, termasuk double, float, atau integer. Akhirnya, kami memilih nama untuk variabel. Kita dapat mendefinisikan variabel volatil menggunakan salah satu metode karena kedua deklarasi valid.

Contoh: Volatile Qualifier Digunakan untuk Mengidentifikasi Objek yang Dapat Dimodifikasi oleh Thread Lain atau Tindakan Luar di C++

Jika objek diubah oleh sinyal luar atau prosedur yang bertindak sebagai interupsi, nilai yang diubah perlu diambil dari RAM karena status cache tidak lagi sesuai untuk sementara. Akibatnya, kompiler menangani akses ke objek volatil dengan tepat.

#sertakan
#sertakan
#sertakan

menggunakan std :: cout ;
menggunakan std :: akhir ;
menggunakan std :: cerr ;
menggunakan std :: makan ;

lincah ke dalam detik = 0 ;

ruang kosong TundaLima Detik ( ) {
ketika ( detik < 3 ) {
kamu tidur ( 200000 ) ;
cerr << 'menunggu...' << akhir ;
}
}

ruang kosong Kenaikan Detik ( ) {
untuk ( ke dalam saya = 0 ; saya < 5 ; ++ saya ) {
tidur ( 1 ) ;
cerr << 'bertambah' << akhir ;
detik = detik + 1 ;
}
}

ke dalam utama ( ) {
struktur waktu mulai { } ;
struktur akhir waktu { } ;
std :: benang utas1 ;

utas1 = std :: benang ( Kenaikan Detik ) ;

TundaLima Detik ( ) ;

benang1. Ikuti ( ) ;
kembali EXIT_SUCCESS ;
}


Untuk mengilustrasikan skenario potensial, kami telah menggunakan kata kunci volatil yang memiliki variabel yang dideklarasikan sebagai Detik dari tipe data “int” dan memberikan nilai 0 padanya. Kemudian, kita membangun dua fungsi: satu sebagai “DelayFiveSeconds” yang mengubah variabel integer volatil global, dan yang lainnya sebagai “IncrementSeconds” yang melakukan evaluasi yang sama di dalam loop while. Perlu dicatat bahwa contoh ini mengizinkan perulangan while untuk mengulang detik ketika detik seharusnya kurang dari 3.

Ketika kondisi terpenuhi, maka blok while akan dieksekusi. Di dalam blok while, kita telah memanggil metode unsleep yang mencetak pernyataan “menunggu”. Fungsi 'IncrementSeonds' memiliki for loop. Setelah iterasi, metode sleep dipanggil, yang mencetak pernyataan “increment” dan menambahkan variabel “seconds”. Eksekusi awal fungsi 'IncrementSeconds' dilakukan oleh utas terpisah yang dibuat oleh fungsi utama. Metode 'DelayFiveSeconds' kemudian dipanggil oleh utas utama, memasuki loop yang tidak akan berakhir jika variabel detik tidak bergerak di atas nilai 5.

Segera setelah utas utama memperhatikan bahwa nilai variabel detik telah berubah, itu akan kembali dari metode karena utas lain telah mulai meningkatkannya secara bersamaan.

Untuk menjalankan kode thread di C++, kita harus menggunakan perintah “g++ -pthread –o filename filename.cc”. Jika Anda tidak menerapkan '-pthread' dalam perintah, maka ada kemungkinan pengecualian dilemparkan oleh kompiler. Akibatnya, kami secara efektif membuat fungsi tunggu bersyarat yang menunggu hingga objek yang mudah menguap diubah oleh kekuatan luar. Penting untuk diingat bahwa blok kode pembaruan dapat berasal dari bagian terjemahan yang berbeda atau tindakan sinyal eksternal, meskipun kode ini akan tetap berfungsi sama jika qualifier volatil dihilangkan dan variabel global konvensional digunakan.

Kesimpulan

Di sini, kita membahas ikhtisar Volatile di C++ bersama dengan sintaks, penggunaan, dan contoh yang sesuai untuk pemahaman yang lebih baik. Karena kompiler tidak dapat memprediksi nilainya, volatile sangat penting dalam pemrograman C. Manfaat utama penggunaan volatile adalah nilainya dapat bervariasi setiap kali pengguna memintanya untuk dimodifikasi atau ketika beberapa utas lain yang menggunakan variabel yang sama aktif.