Rumah > Soal Jawab > teks badan
Gunakan 2 utas untuk menambah automatik (i++) i=1, dan setiap utas melaksanakannya 100 kali Apakah nilai maksimum dan minimum yang mungkin? Tolong beri penjelasan
Tanya juga, adakah ++i atom?
PHP中文网2017-05-17 10:02:27
Minimum boleh 3, iaitu +2, dan maksimum boleh 201, iaitu +200. . . . Mengapa saya tidak bermula dari 0. . .
Proses kitaran ialah:
Baca data dari memori untuk mendaftar
Daftar nilai++
Tulis data kembali ke ingatan
Sesuatu benang mungkin terganggu dalam mana-mana tiga langkah ini. Kes 3 ialah:
Urut pertama membaca data 1
,然后被挂起,寄存器的值被保存到另一个地方。
第二个线程,持续执行了 99 次(此时,内存中的值为 100
),然后被挂起。
第一个线程被唤醒,恢复寄存器的 1
+1 之后 (=2
)被写回内存,该线程被挂起
第二个线程从内存读取2
到寄存器之后被挂起
第一个全部执行完,把值写回内存
唤起第二个线程,恢复寄存器中的2
,完成最后一次循环+1 之后写回 3
所以最终结果是 3
Urutan kedua terus dilaksanakan sebanyak 99 kali (pada masa ini, nilai dalam memori ialah
Urut pertama dibangkitkan, dan selepas
Menghindari urutan kedua. dan memulihkan nilai dalam daftar 2
, tulis kembali 3 selepas melengkapkan gelung terakhir +1
3
. . . . 🎜
🎜Saya belum memikirkan kaedah penjadualan yang lebih kecil lagi. . . 🎜
🎜Nilai maksimum tidak perlu diterangkan terlalu banyak. . . . 🎜PHP中文网2017-05-17 10:02:27
Nilai minimum ialah 2 dan nilai maksimum ialah 200.
2 bermaksud kedua-dua utas mengubah suai data dalam cache CPU, dan akhirnya memori hanya dimuat semula sekali
200 bermakna kedua-dua utas membaca dan mengubah suai secara bergilir-gilir tanpa bersaing antara satu sama lain.
Kita semua telah bertanya tentang nilai maksimum dan minimum, tetapi secara semula jadi ia bukan atom.