Saya pikir dalam algoritma Peterson untuk saling pengecualian , jika proses pertama yang memasuki bagian kritis adalah mati atau dibatalkan, proses lain akan berulang selamanya, menunggu untuk memasuki bagian kritis.
Dalam gambar, jika proses 1 dihentikan, sisa proses di belakang proses 1 akan dieksekusi hingga di mana proses 1 adalah tetapi kemudian loop.
Apa yang terjadi jika proses yang mencapai bagian kritis lebih dulu mati sebelum meninggalkannya?
Jawaban:
Ini tergantung pada bagaimana kunci diterapkan. Jika Anda melakukannya seperti pada artikel Wikipedia, yaitu menjaga bagian penting dengan satu boolean per proses¹, Anda tentu dalam masalah. Jika satu proses mati, ia tidak pernah mengatur ulang benderanya sehingga proses lainnya berulang selamanya.
Dalam praktiknya, Anda dapat melindungi kode Anda dari banyak cara kematian. Misalnya, ambil implementasi gaya Java ini:
Ini akan memastikan bendera disetel ulang apa pun yang terjadi di bagian kritis, selama sistem menangani kesalahan. Di Jawa, itu benar bahkan untuk stack dan heap overflow. Jadi, kecuali proses itu benar-benar hilang (
kill
², kegagalan prosesor, putuskan jaringan, ...) Anda aman. Perhatikan bahwa sebagian besar perangkat lunak tidak penting gagal dalam kasus ini - bagaimana bisa menangani kesalahan itu tidak berjalan? - sehingga harus diterima dalam banyak kasus. Anda dapat menangani ketidakkonsistenan saat memulai ulang jika perlu.Jika Anda menggunakan kunci tingkat bahasa yang tepat, sistem runtime dapat menangani menghilangnya pemilik kunci, yaitu melepaskan kunci dengan pemilik yang mati. Anda dapat mensimulasikan ini sendiri dengan memberikan setiap proses pergantian orang mati yang dapat dibaca orang lain, atau memeriksa secara langsung apakah proses kepemilikan kunci masih hidup (jika sistem mendukungnya).
finalize
harus mengeksekusi bahkankill
, tapi ini tidak dijamin oleh spek.kill -9
mungkin merupakan hukuman mati untuk solusi apa pun yang membutuhkan proses sekarat untuk melakukan sesuatu.sumber
Lihatlah asumsi-asumsi, khususnya bahwa tidak ada proses yang tetap di bagian kritis tanpa batas (yang tentu saja termasuk pergi begitu saja). Saya tidak berpikir ada cara untuk menyelesaikan masalah umum dengan mekanisme sinkronisasi apa pun.
Solusi ini juga hanya untuk dua proses, ada solusi untukn proses sekitar.
sumber