Operasi Atom dan Had i
Dalam konteks multithreading, operasi atom menjamin ketakbolehbahagiaan akses memori. Ini menunjukkan bahawa nilai yang dibaca atau ditulis ke ingatan tidak boleh diganggu oleh urutan lain. Walau bagaimanapun, i bukan operasi atom di Jawa.
Akibat i Bukan atom
Sifat bukan atom i menjadi jelas dalam senario berbilang benang. Apabila berbilang benang secara serentak menambah integer yang sama menggunakan i , mereka mungkin tidak mencapai hasil yang diharapkan. Ini berlaku kerana operasi i terdiri daripada tiga langkah berasingan: membaca nilai semasa, menambahnya dan menulis nilai baharu kembali ke ingatan. Jika langkah-langkah ini diganggu oleh urutan lain, nilai yang diubah suai mungkin bukan jumlah yang dimaksudkan.
Sebab i Bukan atom
Reka bentuk bukan atom i berpunca daripada kebimbangan pengoptimuman. Operasi atom biasanya menanggung overhed prestasi yang ketara disebabkan oleh mekanisme penyegerakan pada kedua-dua peringkat perisian dan perkakasan. Dalam kebanyakan kes, faedah prestasi i melebihi keperluan untuk atomicity.
Alternatif kepada i untuk Atomicity
Untuk memastikan atomicity dalam kod berbilang benang, pertimbangkan untuk menggunakan mekanisme penyegerakan seperti sebagai kunci atau pembolehubah atom. Ini secara eksplisit menguatkuasakan ketakbolehbahagiaan akses memori, memastikan bahawa nilai akhir mencerminkan jumlah semua kenaikan yang dilakukan oleh urutan yang berbeza.
Satu sintaks alternatif untuk kenaikan atom ialah operator pra-kenaikan i, yang menambah pembolehubah sebelum menggunakannya. Walau bagaimanapun, penggunaan ini juga tidak dijamin sebagai atom. Untuk atomicity sebenar, gunakan kaedah disegerakkan atau kelas pembolehubah atom.
Atas ialah kandungan terperinci Mengapa i Tidak Atom dalam Java Berbilang Benang, dan Apakah Alternatifnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!