ไม่มีโครงสร้างล็อคข้อมูลต้นไม้พร้อมกันอย่างต่อเนื่องที่ล็อคตลอดเวลา?


20

ฉันอ่านวรรณกรรมเมื่อเร็ว ๆ นี้และพบว่ามีโครงสร้างข้อมูลที่น่าสนใจอยู่บ้าง

ฉันได้ค้นคว้าวิธีที่แตกต่างหลากหลายในการทำให้เวลาการอัปเดตลดลงเป็นเวลาอัปเดตกรณีที่เลวร้ายที่สุด [1-7]O(1)

เมื่อเร็ว ๆ นี้ฉันเริ่มค้นหาโครงสร้างข้อมูลที่ไม่ล็อคเพื่อสนับสนุนการเข้าถึงพร้อมกันอย่างมีประสิทธิภาพ

มีกรณีที่เลวร้ายที่สุดเทคนิคการอัปเดตใด ๆ เหล่านี้ถูกนำมาใช้ในการใช้โครงสร้างข้อมูลที่ไม่ล็อคหรือไม่?O(1)

ฉันถามเพราะ; สำหรับฉันพวกเขาดูเหมือนการขยายการปฏิบัติที่ชัดเจนของ "การเพิ่มประสิทธิภาพเชิงทฤษฎี" นี้


  1. Tarjan, Robert Endre “ การปรับปรุงโครงสร้างการค้นหาที่สมดุลในการหมุน O (1)” ตัวประมวลผลข้อมูล 16, ไม่ใช่ 5 (1983): 253 - 257

  2. Driscoll, JR, N Sarnak, DD Sleator และ RE Tarjan “ การทำให้โครงสร้างข้อมูลคงทน” ในการประชุมวิชาการ ACM ประจำปีที่สิบแปดเรื่องทฤษฎีคอมพิวเตอร์, หน้า 109–121 STOC '86 นิวยอร์กนิวยอร์กสหรัฐอเมริกา: ACM, 1986

  3. Levcopoulos, C. และ Mark H. Overmars “ โครงสร้างการค้นหาที่สมดุลกับ O (1) เวลาอัปเดตกรณีที่แย่ที่สุด” Acta Inf. หมายเลข 26 3 (พฤศจิกายน 1988): 269–277

  4. Fleischer, Rudolf แผนผังการค้นหาที่สมดุลง่ายพร้อม O (1) เวลาอัปเดตกรณีที่เลวร้ายที่สุด

  5. Dietz, Paul F และ Rajeev Raman “ แผนผังการค้นหานิ้วเวลาการปรับปรุงอย่างต่อเนื่อง” ตัวอักษรการประมวลผลข้อมูล 52 หมายเลข 3 (1994): 147 - 154

  6. Lagogiannis, George, Christos Makris, Yannis Panagis, Spyros Sioutas และ Kostas Tsichlas “ ต้นไม้การค้นหาที่สมดุลแบบไดนามิกใหม่พร้อมเวลาอัปเดตคงที่ในกรณีที่เลวร้ายที่สุด” J. อัตโนมัติ หรั่ง หวี. 8 ไม่ใช่ 4 (กรกฎาคม 2003): 607–632

  7. Brodal, Gerth Stølting, George Lagogiannis, Christos Makris, Athanasios Tsakalidis และ Kostas Tsichlas “ ต้นไม้ค้นหาที่เหมาะสมที่สุดในเครื่องชี้” J. คำนวณ Syst วิทย์ หมายเลข 67 2 (กันยายน 2546): 381–418


2
โปรดพิจารณาเพิ่มลิงก์ไปยังเอกสารเพื่อเป็นประโยชน์แก่ผู้ที่ต้องการตรวจสอบปัญหาของคุณ
ราฟาเอล

3
ตกลงเพิ่มในลิงก์ไปยังบทความที่เกี่ยวข้อง
AT

1
ฉันขอแนะนำให้โพสต์ใหม่ที่cstheory.SE (พร้อมลิงก์กลับมาที่นี่) หากคุณไม่ได้รับคำตอบที่มีประโยชน์ในไม่ช้า
JeffE


ฉันใช้ไลบรารีโครงสร้างข้อมูลปลอดล็อคที่ใช้งานได้จริงมาก่อน พวกเขาได้รับการสนับสนุนโครงสร้างข้อมูลทรีล็อคฟรี อาจจะมีสิ่งที่คุณกำลังมองหา
Reza

คำตอบ:


4

O(1)ไม่ได้ช่วยตัวเอง ในโครงสร้างข้อมูลที่ไม่ล็อคต้องมีอินสแตนซ์อะตอมมิกเดียวเมื่อโครงสร้างข้อมูลของคุณเปลี่ยนแปลง ค่าคงที่การเป็นตัวแทนทั้งหมดจะต้องมีผลบังคับใช้ทั้งในทันทีก่อนและทันทีหลังจากอะตอมอะตอมนั้นทันที

ซึ่งหมายความว่าหากคุณทำการปรับเปลี่ยนโครงสร้างข้อมูลคุณลักษณะที่สำคัญคือคุณสามารถทำ mods ทั้งหมดในโครงสร้างข้อมูลส่วนตัวแล้วสลับในการปรับเปลี่ยนในคำสั่งอะตอมมิกเดียว

ล็อคอิสระมักจะง่ายที่สุดเมื่อโครงสร้างข้อมูลของคุณไม่เปลี่ยนรูป ( ทำงานได้อย่างหมดจด ) คุณเพียงแค่เก็บตัวชี้โกลบอลเป็นโครงสร้างข้อมูลปัจจุบัน ผู้อ่านไม่จำเป็นต้องล็อคอะไรเลย การปรับเปลี่ยนโครงสร้างข้อมูลจะได้รับผลกระทบจากการสลับตัวชี้โกลบอลเป็นโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบหนึ่งไปสู่อีกโครงสร้างหนึ่ง

ตัวอย่างเช่น: ถ้าคุณมีต้นไม้ที่ทำงานได้อย่างสมดุลคุณ:

  1. บันทึกตัวชี้โกลบอลปัจจุบันไปที่รูทของทรี
  2. สร้างทรีใหม่ที่แทรกหรือลบโหนด (นี่คือลอการิทึมเวลาและพื้นที่ในจำนวนโหนดในต้นไม้ในปัจจุบันและเกี่ยวข้องกับการสร้างโหนดใหม่จากการปรับเปลี่ยนชี้ไปที่รากและเพียงแค่ชี้ทุกอย่างใหม่ในส่วนเก่าของโครงสร้างข้อมูลรุ่นก่อนหน้า )
  3. เปรียบเทียบและสลับแบบโกลบอลพอยเตอร์เป็นรูท (โปรดทราบว่าสิ่งนี้อาจล้มเหลวหากมีการแก้ไขอื่นเกิดขึ้นระหว่างเวลาที่คุณบันทึกตัวชี้รูทเก่าและตอนนี้หากเกิดเหตุการณ์นี้คุณกลับไปที่ขั้นตอนที่ 1 แล้วลองอีกครั้งสิ่งนี้เรียกว่า "การควบคุมภาวะพร้อมกันในแง่ดี"

โปรดทราบว่าส่วนที่สำคัญที่สุดคือสิ่งที่ฉันกล่าวไว้ข้างต้นเกี่ยวกับความจำเป็นในการรักษาค่าคงที่ตัวแทน ปกติแล้วมันไม่เพียงพอที่จะมีอัลกอริทึมที่ทำให้อะตอมเปลี่ยนแปลงในกลางต้นไม้ ทำไม? ตัวอย่างเช่น: คุณอาจมีเธรดผู้อ่านที่อยู่ในกระบวนการดำเนินการสำรวจเส้นทางของลำดับต้น หากคุณปรับเปลี่ยนโหนดที่เป็นบรรพบุรุษของโหนดที่พวกเขากำลังอ่านอยู่คุณจะต้องทำให้เกิดเงื่อนไขที่ไม่ถูกต้องซึ่งพวกเขาคิดว่ามีการบังคับใช้ ผู้อ่านจะต้องสามารถทำงานกับโครงสร้างข้อมูลได้เหมือนเดิมก่อนที่คุณจะทำการเปลี่ยนแปลงของคุณหรืออย่างที่มันจะเป็นหลังจากที่คุณทำการเปลี่ยนแปลง ไม่ใช่สิ่งที่อยู่ระหว่าง

O(ล.โอก.(ยังไม่มีข้อความ))O(ยังไม่มีข้อความ)


ฉันคิดว่าเทคนิคการรอแบบแอคทีฟเช่นการเปรียบเทียบและการสลับมักจะเรียกว่า "ล็อคฟรี" ดังนั้นจึงมีวิธีการบางอย่างแม้ในการตั้งค่าที่ไม่แน่นอน
Raphael

ฉันไม่คุ้นเคยกับคำที่รอ (และ Google ไม่ได้ช่วย) (หากคุณกำลังพูดถึงผลงานของ Kogan และ Petrank นั่นแสดงให้เห็นว่าจะเปลี่ยนอัลกอริธึมแบบปลอดล็อคให้ปราศจากการรอคอย) ฉันได้เพิ่มการแก้ไขเกี่ยวกับวิธีที่คุณสามารถจัดการกับความผันแปรของการล็อคอิสระโดยทั่วไป
หลงทางตรรกะ

โดย "รองาน" ผมหมายถึงสิ่งที่ต้องการwhile ( !P ) { noOp(); } doWork();ที่noOpอาจจะเป็นsleepหรือคล้ายกัน
Raphael

ในส่วนของการแก้ไขคุณพูดถึงเทคนิคในการทำให้โครงสร้างข้อมูลที่ไม่สามารถล็อคได้ ตามที่ระบุไว้เราคัดลอกโครงสร้างข้อมูลทั้งหมดทำ mods ให้กับการคัดลอกจากนั้นใช้ CAS ดั้งเดิม อย่างไรก็ตามวิธีการทำCopyขั้นตอนของอะตอม? atomic snapshotมันน่าจะเป็นอีกหนึ่งปัญหาที่ยากของ
hengxin

@ hengxin: คิดว่า CAS ดั้งเดิมเป็นตัวดำเนินการ "เผยแพร่" ก่อนที่จะเผยแพร่โครงสร้างข้อมูลเฉพาะเธรดที่ทำการแก้ไขมีสิทธิ์เข้าถึงได้ หลังจากเผยแพร่โครงสร้างข้อมูลแล้วมันจะไม่เปลี่ยนรูป ขั้นตอนการคัดลอกไม่จำเป็นต้องเป็นแบบอะตอมเพราะสิ่งเดียวที่เธรดสามารถคัดลอกได้คือเวอร์ชันที่เผยแพร่ซึ่งไม่สามารถเปลี่ยนแปลงได้ ถ้าสองเธรดพยายามที่จะกลายพันธุ์พร้อมกันพวกเขาทั้งคู่จะคัดลอกโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบเดียวกันแก้ไขสำเนาโลคัลของพวกเขาและจากนั้นหนึ่งในการดำเนินการ CAS ก็ประสบความสำเร็จและอีกอันหนึ่งล้มเหลว อันที่ล้มเหลวจำเป็นต้องจัดเรียงใหม่และปรับปรุง
หลงทางตรรกะ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.