O ( 1 )ไม่ได้ช่วยตัวเอง ในโครงสร้างข้อมูลที่ไม่ล็อคต้องมีอินสแตนซ์อะตอมมิกเดียวเมื่อโครงสร้างข้อมูลของคุณเปลี่ยนแปลง ค่าคงที่การเป็นตัวแทนทั้งหมดจะต้องมีผลบังคับใช้ทั้งในทันทีก่อนและทันทีหลังจากอะตอมอะตอมนั้นทันที
ซึ่งหมายความว่าหากคุณทำการปรับเปลี่ยนโครงสร้างข้อมูลคุณลักษณะที่สำคัญคือคุณสามารถทำ mods ทั้งหมดในโครงสร้างข้อมูลส่วนตัวแล้วสลับในการปรับเปลี่ยนในคำสั่งอะตอมมิกเดียว
ล็อคอิสระมักจะง่ายที่สุดเมื่อโครงสร้างข้อมูลของคุณไม่เปลี่ยนรูป ( ทำงานได้อย่างหมดจด ) คุณเพียงแค่เก็บตัวชี้โกลบอลเป็นโครงสร้างข้อมูลปัจจุบัน ผู้อ่านไม่จำเป็นต้องล็อคอะไรเลย การปรับเปลี่ยนโครงสร้างข้อมูลจะได้รับผลกระทบจากการสลับตัวชี้โกลบอลเป็นโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบหนึ่งไปสู่อีกโครงสร้างหนึ่ง
ตัวอย่างเช่น: ถ้าคุณมีต้นไม้ที่ทำงานได้อย่างสมดุลคุณ:
- บันทึกตัวชี้โกลบอลปัจจุบันไปที่รูทของทรี
- สร้างทรีใหม่ที่แทรกหรือลบโหนด (นี่คือลอการิทึมเวลาและพื้นที่ในจำนวนโหนดในต้นไม้ในปัจจุบันและเกี่ยวข้องกับการสร้างโหนดใหม่จากการปรับเปลี่ยนชี้ไปที่รากและเพียงแค่ชี้ทุกอย่างใหม่ในส่วนเก่าของโครงสร้างข้อมูลรุ่นก่อนหน้า )
- เปรียบเทียบและสลับแบบโกลบอลพอยเตอร์เป็นรูท (โปรดทราบว่าสิ่งนี้อาจล้มเหลวหากมีการแก้ไขอื่นเกิดขึ้นระหว่างเวลาที่คุณบันทึกตัวชี้รูทเก่าและตอนนี้หากเกิดเหตุการณ์นี้คุณกลับไปที่ขั้นตอนที่ 1 แล้วลองอีกครั้งสิ่งนี้เรียกว่า "การควบคุมภาวะพร้อมกันในแง่ดี"
โปรดทราบว่าส่วนที่สำคัญที่สุดคือสิ่งที่ฉันกล่าวไว้ข้างต้นเกี่ยวกับความจำเป็นในการรักษาค่าคงที่ตัวแทน ปกติแล้วมันไม่เพียงพอที่จะมีอัลกอริทึมที่ทำให้อะตอมเปลี่ยนแปลงในกลางต้นไม้ ทำไม? ตัวอย่างเช่น: คุณอาจมีเธรดผู้อ่านที่อยู่ในกระบวนการดำเนินการสำรวจเส้นทางของลำดับต้น หากคุณปรับเปลี่ยนโหนดที่เป็นบรรพบุรุษของโหนดที่พวกเขากำลังอ่านอยู่คุณจะต้องทำให้เกิดเงื่อนไขที่ไม่ถูกต้องซึ่งพวกเขาคิดว่ามีการบังคับใช้ ผู้อ่านจะต้องสามารถทำงานกับโครงสร้างข้อมูลได้เหมือนเดิมก่อนที่คุณจะทำการเปลี่ยนแปลงของคุณหรืออย่างที่มันจะเป็นหลังจากที่คุณทำการเปลี่ยนแปลง ไม่ใช่สิ่งที่อยู่ระหว่าง
O ( l o g( N) )O ( N)