Di Java, nilai pembolehubah yang dikongsi dalam benang boleh tersekat melainkan anda menggunakan operasi atom atau mekanisme penyegerakan benang lain.
Diberikan GIL dalam CPython. Saya melihat nilai dalam Lock inc di mana:
Walaupun dalam a += 1
simpulan bahasa yang mengelirukan, terdapat beberapa langkah yang dilakukan sebelum memberikan nilai. Untuk mengelakkan keadaan perlumbaan.
Tetapi dalam kes seperti a = 1
tiada kunci. Selepas benang mengemas kini a, adakah mungkin untuk meminta benang A dan B membaca nilai yang berbeza bagi a?
Cara lain untuk bertanya soalan ini ialah, adakah Lock memastikan penyebaran nilai bersama, sedangkan ketiadaan Lock tidak?
Masalahnya bukan a = 1
。如果您在整个代码中所做的唯一一件事是将 a
. Jika satu-satunya perkara yang anda lakukan dalam keseluruhan kod anda ditetapkan a
kepada pelbagai nilai, maka anda tidak memerlukan kunci.
Walau bagaimanapun, jika anda menetapkan a = 1
的同时,代码中的其他地方正在执行 a = a + 1
,那么您需要锁定它们。您锁定了 a = 1
,这样如果其他人递增 a
,它将完全在您设置 a
semasa di tempat lain dalam kod anda melakukan a = a + 1
, maka anda perlu menguncinya. Anda mengunci
a
, ia akan berlaku tepat sebelum atau selepas anda menetapkan a
. Jadi dalam hampir semua kes, melainkan anda benar-benar tahu apa yang anda lakukan, kunci adalah penyelesaian yang paling mudah. 🎜
Atas ialah kandungan terperinci Pembolehubah dan benang yang dikongsi.Kunci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!