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
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, kemudian digantung dan nilai daftar disimpan ke tempat lain. 1,然后被挂起,寄存器的值被保存到另一个地方。 第二个线程,持续执行了 99 次(此时,内存中的值为 100),然后被挂起。 第一个线程被唤醒,恢复寄存器的 1 +1 之后 (=2)被写回内存,该线程被挂起 第二个线程从内存读取2到寄存器之后被挂起 第一个全部执行完,把值写回内存 唤起第二个线程,恢复寄存器中的2,完成最后一次循环+1 之后写回 3
所以最终结果是 3Urutan kedua terus dilaksanakan sebanyak 99 kali (pada masa ini, nilai dalam memori ialah 100), dan kemudian digantung.
Urut pertama dibangkitkan, dan selepas 1 +1 daftar pemulihan (=2) ditulis kembali ke ingatan, utas itu digantung
Yang pertama Kedua-dua utas membaca 2 dari memori ke dalam daftar dan yang pertama dieksekusi sepenuhnya dan menulis nilai kembali ke memori.
Menghindari urutan kedua. dan memulihkan nilai dalam daftar 2, tulis kembali 3 selepas melengkapkan gelung terakhir +1
🎜Jadi hasil akhir ialah 3. . . . 🎜
🎜Saya belum memikirkan kaedah penjadualan yang lebih kecil lagi. . . 🎜
🎜Nilai maksimum tidak perlu diterangkan terlalu banyak. . . . 🎜
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.
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:1 , kemudian digantung dan nilai daftar disimpan ke tempat lain.
Urut pertama membaca data
1
,然后被挂起,寄存器的值被保存到另一个地方。第二个线程,持续执行了 99 次(此时,内存中的值为
100
),然后被挂起。第一个线程被唤醒,恢复寄存器的
1
+1 之后 (=2
)被写回内存,该线程被挂起第二个线程从内存读取
2
到寄存器之后被挂起第一个全部执行完,把值写回内存
唤起第二个线程,恢复寄存器中的
2
,完成最后一次循环+1 之后写回 3所以最终结果是100 ), dan kemudian digantung.
3
Urutan kedua terus dilaksanakan sebanyak 99 kali (pada masa ini, nilai dalam memori ialahUrut pertama dibangkitkan, dan selepas1 +1 daftar pemulihan (=2 ) ditulis kembali ke ingatan, utas itu digantung
Yang pertama Kedua-dua utas membacaMenghindari urutan kedua. dan memulihkan nilai dalam daftar
🎜Jadi hasil akhir ialah2
, tulis kembali 3 selepas melengkapkan gelung terakhir +13
. . . . 🎜 🎜Saya belum memikirkan kaedah penjadualan yang lebih kecil lagi. . . 🎜 🎜Nilai maksimum tidak perlu diterangkan terlalu banyak. . . . 🎜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.