Sebab kebuntuan dalam sistem termasuk syarat pengecualian bersama, syarat permintaan dan penahanan, syarat yang tidak dapat dielakkan dan syarat menunggu bulat. Pengenalan terperinci: 1. Syarat yang saling eksklusif, berbilang utas perlu mengakses sumber kongsi tertentu pada masa yang sama, dan sumber ini hanya boleh diduduki oleh satu utas pada satu masa Jika satu utas menduduki sumber tertentu, utas lain mesti menunggu sumber yang akan dikeluarkan; 2 , Meminta dan menahan syarat Semasa utas memegang sumber tertentu, ia juga meminta sumber yang dipegang oleh utas lain Jika sumber ini diduduki oleh utas lain, ia akan menyebabkan utas itu menunggu , dsb.
Sistem pengendalian tutorial ini: sistem Windows 10, komputer DELL G3.
Kebuntuan merujuk kepada keadaan di mana dua atau lebih utas menunggu antara satu sama lain untuk melepaskan sumber dalam persekitaran berbilang benang, menyebabkan program tidak dapat meneruskan pelaksanaan. Kebuntuan ialah masalah biasa dalam pengaturcaraan serentak, yang boleh menyebabkan kemerosotan prestasi sistem atau malah ranap. Di bawah ini saya akan menerangkan secara terperinci punca kebuntuan.
Sebab kebuntuan biasanya merangkumi aspek berikut:
1. Syarat pengecualian bersama: Berbilang rangkaian perlu mengakses sumber kongsi tertentu pada masa yang sama dan sumber ini hanya boleh diduduki oleh satu rangkaian pada satu masa. Jika satu utas menduduki sumber, utas lain mesti menunggu sumber itu dikeluarkan.
2. Syarat permintaan dan penangguhan: Sebuah rangkaian mengandungi sumber dan pada masa yang sama meminta sumber yang dipegang oleh rangkaian lain. Jika sumber ini diduduki oleh utas lain, ini akan menyebabkan utas itu menunggu.
3. Keadaan yang tidak dapat dielakkan: Sumber yang telah diperuntukkan kepada thread tidak boleh didahulukan oleh thread lain dan hanya boleh dikeluarkan oleh thread yang memilikinya.
4. Syarat menunggu pekeliling: Perhubungan menunggu kitaran terbentuk antara berbilang utas dan setiap utas sedang menunggu sumber yang dipegang oleh utas seterusnya.
Apabila empat syarat di atas dipenuhi pada masa yang sama, kebuntuan mungkin berlaku. Berikut ialah contoh mudah untuk menggambarkan punca kebuntuan:
Andaikan terdapat dua utas A dan B, yang masing-masing memegang sumber X dan sumber Y, dan kedua-duanya perlu mendapatkan sumber yang dipegang oleh pihak yang satu lagi.
Apabila thread A dijalankan ke bahagian kritikal tertentu, ia perlu mendapatkan sumber Y, tetapi didapati sumber Y sudah diduduki oleh thread B, jadi thread A memasuki keadaan menunggu dan melepaskan sumber X.
Pada masa yang sama, apabila utas B dilaksanakan ke bahagian kritikal tertentu, ia perlu mendapatkan sumber X, tetapi didapati sumber X sudah diduduki oleh utas A, jadi utas B memasuki keadaan menunggu dan melepaskan sumber Y.
Dengan cara ini, benang A dan benang B menunggu antara satu sama lain untuk melepaskan sumber, mengakibatkan kebuntuan.
Untuk mengelakkan berlakunya kebuntuan, kami boleh menggunakan strategi berikut:
1 Elakkan menggunakan berbilang kunci: Cuba kurangkan permintaan serentak untuk berbilang sumber Anda boleh mempertimbangkan untuk memfaktorkan semula kod untuk menggabungkan berbilang kunci ke dalam satu Kunci.
2. Dapatkan kunci mengikut urutan: Jika anda mesti memperoleh berbilang kunci pada masa yang sama, anda boleh memperoleh kunci dalam susunan tetap untuk mengelakkan kebuntuan disebabkan oleh benang yang berbeza memperoleh kunci dalam susunan yang berbeza.
3 Tetapkan tamat masa: Untuk beberapa situasi yang tidak dapat dielakkan, anda boleh menetapkan tamat masa Selepas menunggu lebih daripada tempoh masa tertentu, berhenti mendapatkan kunci dan lakukan pemprosesan lain.
4. Pengesanan dan pemulihan jalan buntu: Anda boleh menggunakan algoritma pengesanan jalan buntu untuk mengesan berlakunya jalan buntu dan mengambil langkah yang sepadan untuk memulihkan, seperti menamatkan rangkaian atau melancarkan semula operasi.
5 Reka bentuk strategi peruntukan sumber secara munasabah: Apabila mereka bentuk sistem, peruntukkan sumber secara munasabah untuk mengelakkan kitaran menunggu.
Ringkasnya, kebuntuan berlaku kerana beberapa utas sedang menunggu antara satu sama lain untuk melepaskan sumber, menyebabkan program tidak dapat meneruskan pelaksanaan. Untuk mengelakkan kebuntuan, anda perlu memberi perhatian kepada syarat pengecualian bersama, syarat permintaan dan penangguhan, syarat yang tidak dapat dielakkan dan keadaan menunggu bulat, dan menggunakan strategi yang sepadan untuk mencegah dan menangani kejadian kebuntuan.
Atas ialah kandungan terperinci Apakah sebab-sebab kebuntuan sistem?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!