Rumah  >  Soal Jawab  >  teks badan

java - Masalah kemerosotan kunci tulis dalam kunci baca-tulis

Apabila kunci tulis diturunkan taraf, benang yang pada masa ini telah memperoleh kunci tulis diperlukan untuk memegang kunci tulis, kemudian memperoleh kunci baca, dan kemudian lepaskan kunci tulis.

Jadi mengapa perlu memegang kunci tulis? ?

Gambar di atas menyebut "Maka thread semasa tidak dapat merasakan kemas kini data thread T". Jika utas T memperoleh kunci tulis dan kemudian mengemas kini data, utas semasa tidak dapat melihat kemas kini data sebelum kunci tulis dilepaskan Ini tiada masalah, tetapi sebaik sahaja utas T melepaskan kunci tulis, utas semasa akan Anda rasa kemas kini data sepatutnya tiada masalah untuk memahami di sini, bukan?

bantu saya jelaskan, thx

大家讲道理大家讲道理2686 hari yang lalu1154

membalas semua(3)saya akan balas

  • 習慣沉默

    習慣沉默2017-06-12 09:26:17

    Ini menerangkan penurunan taraf kunci Pertama, kunci tulis adalah eksklusif, kunci baca dikongsi, dan kemudian kunci baca dan tulis adalah saling eksklusif antara utas berubah, tetapi kerana kunci tulis Hanya terdapat satu kunci, jadi degradasi akan berlaku.
    Jika anda melepaskan kunci tulis dahulu dan kemudian memperoleh kunci baca, urutan lain mungkin memperoleh kunci tulis sebelum memperolehnya, menyekat pemerolehan kunci baca dan anda tidak akan dapat mengesan perubahan data. Oleh itu, anda perlu memegang kunci tulis terlebih dahulu untuk memastikan data tidak berubah, dapatkan kunci baca, dan kemudian lepaskan kunci tulis.

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:26:17

    Kunci tulis tidak membenarkan operasi baca dan tulis daripada proses lain, manakala kunci baca membenarkan operasi baca.
    Berdasarkan contoh yang anda tangkap, apabila anda melepaskan kunci tulis, proses T memperoleh kunci tulis Pada masa ini, anda tidak boleh memperoleh kunci baca, jadi anda mesti memperoleh kunci baca dahulu dan kemudian lepaskan kunci tulis.

    Pertama sekali, anda tidak faham maksud kunci baca-tulis Kewujudan kunci baca bermakna operasi tulis lain tidak dibenarkan.
    Mengikut contoh yang anda berikan, mungkin terdapat urutan transaksi yang tidak mahu operasinya diganggu oleh urutan lain, dan operasi transaksi ini mungkin dibahagikan kepada beberapa bahagian untuk mengemas kini data (atau jadual) yang berbeza atau bahkan sangat masa -memakan. Jika kunci tulis digunakan secara eksklusif untuk masa yang lama, ia jelas tidak dibenarkan untuk beberapa aplikasi tindak balas tinggi, jadi selepas menyelesaikan beberapa operasi tulis, kunci baca digunakan untuk menurunkan taraf untuk membenarkan tindak balas kepada operasi baca proses lain. Kunci hanya dilepaskan apabila semua transaksi selesai.
    Mengikut pemahaman anda, jika kunci tulis diduduki oleh utas lain, maka utas transaksi perlu mengganggu dan menunggu kunci tulis lain dilepaskan.

    balas
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-12 09:26:17

    "Maka thread semasa tidak dapat melihat kemas kini data thread T"

    Apabila T1 membaca data, nilai data disalin ke konteks urutan semasa, jadi urutan lain tidak mempunyai cara untuk mengesan sama ada data telah dikemas kini. Selagi data dihantar ke memori, iaitu Heap, benang lain boleh mendapat nilai terkini.

    balas
    0
  • Batalbalas