tidak membantu dalam dan dari dirinya sendiri. Dalam struktur data bebas-kunci, perlu ada instance atom tunggal ketika struktur data Anda tampaknya berubah. Semuainvarian representasiharus berlaku segera sebelum dan segera setelah instan atom itu.O ( 1 )
Ini berarti bahwa jika Anda melakukan modifikasi pada struktur data karakteristik penting adalah bahwa Anda dapat melakukan semua mod pada struktur data pribadi dan kemudian menukar modifikasi dalam instruksi atom tunggal.
Kunci-kebebasan biasanya paling mudah ketika struktur data Anda tidak dapat diubah ( berfungsi murni ). Anda cukup menyimpan pointer global ke versi saat ini dari struktur data. Pembaca tidak perlu mengunci apa pun. Modifikasi pada struktur data dilakukan dengan menukar penunjuk global ke satu struktur data yang tidak dapat diubah lainnya.
Misalnya: jika Anda memiliki pohon seimbang pohon murni fungsional Anda:
- Rekam pointer global saat ini ke akar pohon.
- Buat pohon baru yang menyisipkan atau menghapus simpul. (Ini adalah logaritmik dalam waktu dan ruang dalam jumlah node saat ini di pohon, dan melibatkan pembuatan node baru dari titik modifikasi hingga ke root, dan hanya menunjukkan segala sesuatu yang baru di bagian lama dari versi sebelumnya dari struktur data. )
- Bandingkan dan tukarkan secara global pointer global ke root. (Perhatikan bahwa ini mungkin gagal jika modifikasi lain telah terjadi antara waktu Anda merekam pointer root lama dan sekarang. Jika ini terjadi, Anda kembali ke langkah 1 dan coba lagi. Ini disebut "kontrol konkurensi optimis.")
Perhatikan bahwa bagian terpenting adalah apa yang saya katakan di atas tentang perlunya mempertahankan invarian perwakilan. Biasanya tidak cukup untuk memiliki algoritma yang secara atomis membuat perubahan di tengah pohon. Mengapa? Misalnya: Anda mungkin memiliki utas pembaca yang sedang dalam proses melakukan preorder traversal dari pohon. Jika Anda memodifikasi sebuah simpul yang merupakan leluhur dari simpul yang sedang mereka baca maka Anda akan membatalkan prasyarat yang menurut mereka telah ditegakkan. Pembaca harus dapat bekerja dengan struktur data persis seperti sebelum Anda membuat perubahan, atau persis seperti yang akan terjadi setelah Anda membuat perubahan. Bukan sesuatu di antaranya.
O ( l o g( N) )HAI ( N)