java - Soalan tentang i++
phpcn_u1582
phpcn_u1582 2017-05-17 10:00:27
0
2
597

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?

phpcn_u1582
phpcn_u1582

membalas semua(2)
洪涛

Minimum boleh 3, iaitu +2, dan maksimum boleh 201, iaitu +200. . . . Mengapa saya tidak bermula dari 0. . .

Proses kitaran ialah:

  1. Baca data dari memori untuk mendaftar

  2. Daftar nilai++

  3. 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. . . . 🎜
Ty80

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan