Menurut wikipedia,
Kunci bersama terkadang disebut "kunci baca" dan kunci eksklusif terkadang disebut "kunci tulis".
Bisakah Anda menjelaskan alasan di balik istilah "bersama" dan "eksklusif"?
Menurut wikipedia,
Kunci bersama terkadang disebut "kunci baca" dan kunci eksklusif terkadang disebut "kunci tulis".
Bisakah Anda menjelaskan alasan di balik istilah "bersama" dan "eksklusif"?
Jawaban:
Saya menulis jawaban ini karena saya pikir ini akan menjadi analogi yang menyenangkan (dan pas):
Pikirkan objek yang dapat dikunci sebagai papan tulis (dapat dikunci) di ruang kelas yang berisi seorang guru (penulis) dan banyak siswa (pembaca).
Saat seorang guru menulis sesuatu (kunci eksklusif) di papan tulis:
Tidak ada yang bisa membacanya, karena itu masih ditulis, dan dia memblokir pandangan Anda => Jika sebuah objek dikunci secara eksklusif, kunci bersama tidak dapat diperoleh .
Guru lain tidak akan muncul dan mulai menulis, atau papan menjadi tidak dapat dibaca, dan membingungkan siswa => Jika sebuah objek dikunci secara eksklusif, kunci eksklusif lainnya tidak dapat diperoleh .
Ketika siswa membaca (kunci bersama) apa yang ada di papan tulis:
Mereka semua dapat membaca apa yang ada di dalamnya, bersama-sama => Beberapa kunci bersama dapat hidup berdampingan .
Guru menunggu mereka selesai membaca sebelum dia membersihkan papan untuk menulis lebih banyak => Jika satu atau lebih kunci bersama sudah ada, kunci eksklusif tidak dapat diperoleh .
lock()
panggilan berikutnya setelahnya yang pertama akan segera kembali dan berhasil. yaitu Anda berhasil mengunci sesuatu yang sudah Anda miliki.
writer
diberikan preferensi daripada menunggu pembaca ketika kunci memilih siapa yang mendapatkan kunci berikutnya (ketika dibuka oleh pemiliknya saat ini). Ini tentang kebijakan .
Ini sangat mudah. Kunci baca juga dikenal sebagai kunci bersama karena lebih dari satu proses dapat membaca dalam waktu yang bersamaan. Inti dari kunci baca adalah untuk mencegah perolehan kunci tulis oleh proses lain. Sebaliknya, kunci tulis menghambat semua operasi lain sementara operasi tulis selesai, itulah sebabnya ia digambarkan sebagai eksklusif.
Jadi kunci baca mengatakan "Anda dapat membaca sekarang tetapi jika Anda ingin menulis, Anda harus menunggu" sedangkan kunci tulis mengatakan "Anda harus menunggu".
Saya menyadari Anda sedang meneliti untuk mendukung studi Anda, tetapi saya tidak bisa menahan keinginan untuk memberi kuliah.
Penggunaan penguncian yang tidak kompeten adalah penyebab utama sakit kepala kinerja. Penggunaan sistem penguncian yang membedakan kunci baca dan tulis adalah awal yang baik, tetapi desain yang cermat terkadang dapat menghilangkan banyak kebutuhan untuk mengunci. Misalnya, status sesi tidak boleh diadakan dalam satu koleksi global per elemen negara.
Saya benar-benar telah melihat ini dilakukan. Ini adalah desain yang mengerikan, menyebabkan tinju dan perubahan pada koleksi untuk setiap perubahan terakhir ke status sesi, memerlukan kunci tulis yang berlarut-larut. Overhead melumpuhkan, secara efektif mengurangi server ke perilaku single threaded.
Cukup menggabungkan semua status sesi ke dalam sebuah struct adalah peningkatan yang sangat besar. Perubahan status sesi hanya mengubah nilai anggota struct status sesi. Karena tidak ada sesi lain yang memiliki kesempatan atau bahkan kesempatan untuk merujuk secara langsung status sesi, satu-satunya koleksi yang diperbarui adalah daftar sesi. Akibatnya, penguncian sama sekali tidak diperlukan selama sesi, hanya di awal dan akhir, dan throughput meningkat dengan faktor 3000.
Skenario penguncian umum lainnya adalah sumber daya yang dibagi antara utas aplikasi pengguna. Sebagian besar kerangka kerja modern menangani hal ini menggunakan pesan, bukan kunci; saat Anda "bertransisi ke thread UI", Anda sebenarnya sedang mengantre pesan yang berisi penunjuk fungsi dan beberapa parameter (atau delegasi dan bingkai tumpukan bergantung pada implementasinya).
Kunci eksklusif atau kunci tulis memberikan proses akses eksklusif untuk menulis ke bagian file yang ditentukan. Saat kunci tulis diterapkan, tidak ada proses lain yang dapat mengunci bagian file itu.
Kunci bersama atau baca melarang proses lain meminta kunci tulis pada bagian file yang ditentukan. Namun, proses lain dapat meminta kunci baca.
Lebih lanjut tentang itu: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html
Prinsipnya sama di sisi database juga. Sesuai dokumentasi Oracle
Mode kunci eksklusif mencegah sumber daya terkait untuk dibagikan. Mode kunci ini diperoleh untuk mengubah data. Transaksi pertama untuk mengunci sumber daya secara eksklusif adalah satu-satunya transaksi yang dapat mengubah sumber daya hingga kunci eksklusif dilepaskan.
Mode kunci berbagi memungkinkan sumber daya terkait untuk dibagikan, tergantung pada operasi yang terlibat. Beberapa pengguna yang membaca data dapat berbagi data, menahan kunci berbagi untuk mencegah akses bersamaan oleh penulis (yang membutuhkan kunci eksklusif). Beberapa transaksi dapat
memperoleh kunci saham pada sumber yang sama.