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

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

ข้อกำหนดด้านการซิงโครไนซ์อีกประการหนึ่งที่ต้องพิจารณาคือ ลำดับการทำงานของกระบวนการหรือเธรดต่างๆ ตัวอย่างเช่น เราไม่สามารถขึ้นเครื่องบินได้ก่อนที่จะซื้อตั๋ว ในทำนองเดียวกัน เราไม่สามารถตรวจสอบอีเมลได้ก่อนที่จะตรวจสอบข้อมูลประจำตัวที่ถูกต้อง (เช่น ชื่อผู้ใช้และรหัสผ่าน) ในทำนองเดียวกัน ตู้เอทีเอ็มจะไม่ให้บริการใดๆ จนกว่าจะได้รับรหัส PIN ที่ถูกต้อง
นอกเหนือจากการกีดกันซึ่งกันและกันแล้ว การซิงโครไนซ์ยังเกี่ยวข้องกับสิ่งต่อไปนี้ด้วย:
- ภาวะติดตาย (Deadlock ) เกิดขึ้นเมื่อกระบวนการจำนวนมากกำลังรอทรัพยากรที่ใช้ร่วมกัน (ส่วนวิกฤต) ซึ่งถูกครอบครองโดยกระบวนการอื่น ในกรณีนี้ กระบวนการเหล่านั้นจะรอต่อไปและไม่ดำเนินการใดๆ อีกต่อไป
- ภาวะอดอยาก (starvation ) เกิดขึ้นเมื่อกระบวนการหนึ่งกำลังรอที่จะเข้าสู่ส่วนวิกฤต แต่กระบวนการอื่น ๆ ผูกขาดส่วนวิกฤตนั้นไว้ ทำให้กระบวนการแรกต้องรออย่างไม่มีกำหนด
- การสลับลำดับความสำคัญ (priority inversion ) เกิดขึ้นเมื่อกระบวนการที่มีลำดับความสำคัญสูงอยู่ในส่วนวิกฤต และถูกขัดจังหวะโดยกระบวนการที่มีลำดับความสำคัญปานกลาง การละเมิดกฎลำดับความสำคัญนี้อาจเกิดขึ้นได้ในบางสถานการณ์ และอาจนำไปสู่ผลกระทบร้ายแรงในระบบเรียลไทม์
- การรอคอยที่ไม่สิ้นสุด (busy waiting ) เกิดขึ้นเมื่อกระบวนการหนึ่งทำการตรวจสอบสิทธิ์การเข้าถึงส่วนสำคัญ (critical section) บ่อยครั้ง การตรวจสอบสิทธิ์บ่อยครั้งนี้จะแย่งเวลาประมวลผลจากกระบวนการอื่น
การลดให้เหลือน้อยที่สุด
หนึ่งในความท้าทายสำหรับการออกแบบอัลกอริทึมระดับเอ็กซาสเกลคือการลดหรือลดการซิงโครไนซ์ การซิงโครไนซ์ใช้เวลานานกว่าการคำนวณ โดยเฉพาะอย่างยิ่งในการประมวลผลแบบกระจาย การลดการซิงโครไนซ์ดึงดูดความสนใจจากนักวิทยาศาสตร์คอมพิวเตอร์มานานหลายทศวรรษ ในขณะที่มันกลายเป็นปัญหาที่สำคัญมากขึ้นเรื่อย ๆ ในช่วงไม่นานมานี้ เนื่องจากช่องว่างระหว่างการปรับปรุงการคำนวณและเวลาแฝงเพิ่มขึ้น การทดลองแสดงให้เห็นว่าการสื่อสาร (ทั่วโลก) เนื่องจากการซิงโครไนซ์บนคอมพิวเตอร์แบบกระจายมีส่วนแบ่งที่โดดเด่นในตัวแก้ปัญหาแบบวนซ้ำแบบเบาบาง[ 2 ]ปัญหานี้กำลังได้รับความสนใจเพิ่มขึ้นหลังจากการปรากฏตัวของเมตริกมาตรฐานใหม่ High Performance Conjugate Gradient (HPCG) [ 3 ]สำหรับการจัดอันดับซูเปอร์คอมพิวเตอร์ 500 อันดับแรก
ปัญหา
ต่อไปนี้คือปัญหาคลาสสิกบางประการเกี่ยวกับการซิงโครไนซ์:
- ปัญหาผู้ผลิต-ผู้บริโภค (หรือเรียกอีกอย่างว่า ปัญหาบัฟเฟอร์ที่มีขอบเขตจำกัด)
- ปัญหาระหว่างผู้อ่านและผู้เขียน ;
- ปัญหาของนักปรัชญาที่กำลังรับประทานอาหาร
ปัญหาเหล่านี้ถูกนำมาใช้เพื่อทดสอบรูปแบบหรือกลไกการซิงโครไนซ์ที่เสนอใหม่เกือบทุกรูปแบบ
เหนือศีรษะ
ค่าใช้จ่ายในการซิงโครไนซ์อาจส่งผลกระทบอย่างมากต่อประสิทธิภาพใน สภาพแวดล้อม การประมวลผลแบบขนานซึ่งการรวมข้อมูลจากหลายกระบวนการอาจทำให้เกิดค่าใช้จ่ายที่สูงขึ้นอย่างมาก—บ่อยครั้งสูงกว่าการประมวลผลข้อมูลเดียวกันบนเธรดเดียวถึงสองเท่าหรือมากกว่านั้น—เนื่องจากค่าใช้จ่ายเพิ่มเติมของการสื่อสารระหว่างกระบวนการและกลไกการซิงโครไนซ์[ 4 ] [ 5 ] [ 6 ]
การซิงโครไนซ์ฮาร์ดแวร์
ระบบหลายระบบให้การสนับสนุนทางฮาร์ดแวร์สำหรับโค้ด ส่วนวิกฤต
ระบบ ประมวลผลเดี่ยวหรือระบบที่มีโปรเซสเซอร์ เดียว สามารถปิดใช้งานการขัดจังหวะ ได้ โดยการเรียกใช้โค้ดที่กำลังทำงานอยู่โดยไม่ต้องมีการแย่งชิงซึ่งเป็นวิธีที่มีประสิทธิภาพต่ำมากในระบบมัลติโปรเซสเซอร์[ 7 ] “ความสามารถหลักที่เราต้องการในการใช้งานการซิงโครไนซ์ในมัลติโปรเซสเซอร์คือชุดของฮาร์ดแวร์พื้นฐานที่มีความสามารถในการอ่านและแก้ไขตำแหน่งหน่วยความจำแบบอะตอมิก หากไม่มีความสามารถดังกล่าว ต้นทุนในการสร้างฮาร์ดแวร์พื้นฐานสำหรับการซิงโครไนซ์จะสูงเกินไปและจะเพิ่มขึ้นตามจำนวนโปรเซสเซอร์ที่เพิ่มขึ้น มีการกำหนดสูตรทางเลือกหลายแบบสำหรับฮาร์ดแวร์พื้นฐาน ซึ่งทั้งหมดนี้ให้ความสามารถในการอ่านและแก้ไขตำแหน่งแบบอะตอมิก พร้อมกับวิธีการบางอย่างในการบอกว่าการอ่านและการเขียนนั้นดำเนินการแบบอะตอมิกหรือไม่ ฮาร์ดแวร์พื้นฐานเหล่านี้เป็นส่วนประกอบพื้นฐานที่ใช้ในการสร้างการดำเนินการซิงโครไนซ์ระดับผู้ใช้ที่หลากหลาย รวมถึงสิ่งต่างๆ เช่นล็อกและบาเรียร์โดยทั่วไป สถาปนิกไม่ได้คาดหวังว่าผู้ใช้จะใช้ฮาร์ดแวร์พื้นฐาน แต่คาดหวังว่าโปรแกรมเมอร์ระบบจะใช้ฮาร์ดแวร์พื้นฐานเหล่านี้เพื่อสร้างไลบรารีการซิงโครไนซ์ ซึ่งเป็นกระบวนการที่ซับซ้อนและยุ่งยาก” [ 8 ]ฮาร์ดแวร์สมัยใหม่หลายชิ้นมีคำสั่งอะตอมิกดังกล่าว ตัวอย่างทั่วไปสองอย่างคือ: ทดสอบและตั้งค่าซึ่งดำเนินการกับคำหน่วยความจำเดียว และเปรียบเทียบและสลับซึ่งสลับเนื้อหาของคำหน่วยความจำสองคำ
การสนับสนุนในภาษาโปรแกรม
ในJavaวิธีหนึ่งในการป้องกันการรบกวนของเธรดและข้อผิดพลาดความสอดคล้องของหน่วยความจำคือการใส่คีย์เวิร์ดsynchronized ไว้หน้าลาย เซ็นของเมธอด ซึ่งในกรณีนี้จะใช้ล็อกของอ็อบเจ็กต์ที่ประกาศเพื่อบังคับใช้การซิงโครไนซ์ วิธีที่สองคือการห่อบล็อกโค้ดไว้ใน ส่วน synchronized(someObject){...}ซึ่งให้การควบคุมที่ละเอียดกว่า วิธีนี้บังคับให้เธรดใดๆ ต้องได้รับล็อกของsomeObjectก่อนที่จะสามารถเรียกใช้บล็อกที่อยู่ภายในได้ ล็อกจะถูกปล่อยโดยอัตโนมัติเมื่อเธรดที่ได้รับล็อกออกจากบล็อกนี้หรือเข้าสู่สถานะรอภายในบล็อก การอัปเดตตัวแปรใดๆ ที่ทำโดยเธรดในบล็อก synchronized จะปรากฏให้เธรดอื่นๆ เห็นเมื่อพวกมันได้รับล็อกและเรียกใช้บล็อกในลักษณะเดียวกัน สำหรับการใช้งานทั้งสองแบบ สามารถใช้อ็อบเจ็กต์ใดๆ ก็ได้เพื่อจัดหาล็อก เนื่องจากอ็อบเจ็กต์ Java ทั้งหมดมีล็อกภายในหรือล็อกมอนิเตอร์ที่เกี่ยวข้องกับพวกมันเมื่อสร้างอินสแตนซ์[ 9 ]
บล็อก synchronizedใน Java นอกจากจะช่วยให้เกิดการกีดกันร่วมกันและความสอดคล้องของหน่วยความจำแล้ว ยังช่วยให้สามารถส่งสัญญาณได้ด้วย กล่าวคือ การส่งเหตุการณ์จากเธรดที่ได้รับล็อกและกำลังดำเนินการบล็อกโค้ดไปยังเธรดที่กำลังรอรับล็อกภายในบล็อกนั้น ดังนั้น ส่วนที่ ซิงโครไนซ์ ใน Java จึงรวมฟังก์ชันการทำงานของทั้งmutexและเหตุการณ์ เข้าด้วยกัน เพื่อให้มั่นใจได้ถึงการซิงโครไนซ์ โครงสร้างดังกล่าวเรียกว่าตัวตรวจสอบการซิงโครไนซ์ (synchronization monitor )
.NET Frameworkยังใช้กลไกการซิงโครไนซ์พื้นฐานอีกด้วย[ 10 ] "การซิงโครไนซ์ได้รับการออกแบบให้เป็นการทำงานร่วมกัน โดยกำหนดให้ทุกเธรดปฏิบัติตามกลไกการซิงโครไนซ์ก่อนที่จะเข้าถึงทรัพยากรที่ได้รับการป้องกันเพื่อให้ได้ผลลัพธ์ที่สอดคล้องกัน การล็อก การส่งสัญญาณ ประเภทการซิงโครไนซ์แบบเบา การรอแบบวนซ้ำ และการดำเนินการแบบอินเตอร์ล็อก เป็นกลไกที่เกี่ยวข้องกับการซิงโครไนซ์ใน .NET" [ 11 ]
ภาษาโปรแกรมหลายภาษาสนับสนุนการซิงโครไนซ์ และมีการเขียนภาษา เฉพาะทางขึ้นมาเพื่อการพัฒนา แอปพลิเคชันฝังตัวโดยเฉพาะ ซึ่งการซิงโครไนซ์แบบกำหนดได้แน่นอนเป็นสิ่งสำคัญยิ่ง
การดำเนินการ
สปินล็อค
อีกวิธีที่มีประสิทธิภาพในการใช้งานการซิงโครไนซ์คือการใช้ spinlocks ก่อนที่จะเข้าถึงทรัพยากรที่ใช้ร่วมกันหรือส่วนของโค้ดใดๆ โปรเซสเซอร์แต่ละตัวจะตรวจสอบแฟล็ก หากแฟล็กถูกรีเซ็ต โปรเซสเซอร์จะตั้งค่าแฟล็กและดำเนินการเธรดต่อไป แต่ถ้าแฟล็กถูกตั้งค่า (ล็อก) เธรดจะวนลูปและตรวจสอบว่าแฟล็กถูกตั้งค่าหรือไม่ Spinlocks จะมีประสิทธิภาพก็ต่อเมื่อแฟล็กถูกรีเซ็ตในรอบการทำงานที่ต่ำกว่า มิฉะนั้นอาจทำให้เกิดปัญหาด้านประสิทธิภาพเนื่องจากสิ้นเปลืองรอบการทำงานของโปรเซสเซอร์จำนวนมากในการรอ[ 12 ]
อุปสรรค
กลไก Barrier นั้นง่ายต่อการใช้งานและให้การตอบสนองที่ดี โดยอาศัยแนวคิดของการสร้างวงจรการรอเพื่อให้เกิดการซิงโครไนซ์ ลองพิจารณาเธรดสามเธรดที่ทำงานพร้อมกัน โดยเริ่มจาก Barrier ที่ 1 หลังจากเวลา t เธรดที่ 1 จะไปถึง Barrier ที่ 2 แต่ยังต้องรอให้เธรดที่ 2 และ 3 ไปถึง Barrier ที่ 2 ก่อน เนื่องจากยังไม่มีข้อมูลที่ถูกต้อง เมื่อเธรดทั้งหมดไปถึง Barrier ที่ 2 แล้ว พวกมันก็จะเริ่มทำงานใหม่ หลังจากเวลา t เธรดที่ 1 จะไปถึง Barrier ที่ 3 แต่จะต้องรอเธรดที่ 2 และ 3 และข้อมูลที่ถูกต้องอีกครั้ง
ดังนั้น ในการซิงโครไนซ์แบบกั้นของเธรดหลายตัว จะมีเธรดจำนวนหนึ่งที่ต้องรอเธรดอื่น ๆ เสมอ ดังเช่นในตัวอย่างข้างต้น เธรด 1 รอเธรด 2 และ 3 ซึ่งส่งผลให้ประสิทธิภาพของกระบวนการลดลงอย่างมาก[ 13 ]
ฟังก์ชันรอการซิงโครไนซ์ของบาเรียร์สำหรับ เธรด ที่ i สามารถแสดงได้ดังนี้:
(Wbarrier)i=f ((Tbarrier)i, (Rthread)i)
โดยที่ Wbarrier คือเวลาที่รอสำหรับเธรด Tbarrier คือจำนวนเธรดที่มาถึง และ Rthread คืออัตราการมาถึงของเธรด[ 14 ]
ผลการทดลองแสดงให้เห็นว่า 34% ของเวลาดำเนินการทั้งหมดถูกใช้ไปกับการรอเธรดอื่นที่ทำงานช้ากว่า[ 13 ]
สัญญาณไฟ
เซมาฟอร์เป็นกลไกการส่งสัญญาณที่อนุญาตให้เธรด/โปรเซสเซอร์หนึ่งตัวหรือมากกว่านั้นเข้าถึงส่วนใดส่วนหนึ่งได้ เซมาฟอร์มีแฟล็กซึ่งมีค่าคงที่ค่าหนึ่ง และทุกครั้งที่เธรดต้องการเข้าถึงส่วนนั้น แฟล็กจะถูกลดค่าลง ในทำนองเดียวกัน เมื่อเธรดออกจากส่วนนั้น แฟล็กจะถูกเพิ่มค่าขึ้น หากแฟล็กเป็นศูนย์ เธรดจะไม่สามารถเข้าถึงส่วนนั้นได้และจะถูกบล็อกหากเลือกที่จะรอ
เซมาฟอร์บางตัวจะอนุญาตให้เธรดหรือกระบวนการเพียงตัวเดียวในส่วนโค้ด เซมาฟอร์ดังกล่าวเรียกว่าเซมาฟอร์ไบนารีและคล้ายกับมิวเท็กซ์มาก ในที่นี้ หากค่าของเซมาฟอร์เป็น 1 เธรดจะได้รับอนุญาตให้เข้าถึง และหากค่าเป็น 0 การเข้าถึงจะถูกปฏิเสธ[ 15 ]
ธุรกรรมแบบกระจาย
ในสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ธุรกรรมแบบซิงโครนัสสามารถทำได้โดยใช้ กระบวนทัศน์ การร้องขอ-ตอบสนองและสามารถนำไปใช้ได้สองวิธี: [ 16 ]
- สร้างคิว แยกกันสอง คิว: คิวหนึ่งสำหรับคำขอ และอีกคิวหนึ่งสำหรับคำตอบ ผู้สร้างเหตุการณ์ต้องรอจนกว่าจะได้รับคำตอบ
- สร้าง คิวชั่วคราวเฉพาะสำหรับแต่ละคำขอ
พื้นฐานทางคณิตศาสตร์
เดิมทีการซิงโครไนซ์เป็นแนวคิดที่อิงตามกระบวนการ โดยสามารถล็อกวัตถุได้ การใช้งานหลักคือในฐานข้อมูล มีการล็อก (ไฟล์) สองประเภท คือ แบบอ่านอย่างเดียวและแบบอ่านเขียนได้ การล็อกแบบอ่านอย่างเดียวอาจถูกใช้งานโดยหลายกระบวนการหรือเธรด ในขณะที่การล็อกแบบอ่านเขียนได้นั้นเป็นแบบผูกขาด เนื่องจากสามารถใช้งานได้โดยกระบวนการ/เธรดเดียวในแต่ละครั้งเท่านั้น
แม้ว่ากลไกการล็อกจะถูกคิดค้นขึ้นสำหรับฐานข้อมูลไฟล์ แต่ข้อมูลก็ยังถูกแชร์ในหน่วยความจำระหว่างกระบวนการและเธรดต่างๆ ด้วยเช่นกัน บางครั้งอาจมีวัตถุ (หรือไฟล์) มากกว่าหนึ่งรายการถูกล็อกในเวลาเดียวกัน หากไม่ได้ล็อกพร้อมกัน อาจเกิดการทับซ้อนกัน ทำให้เกิดข้อผิดพลาดการล็อกตาย (deadlock exception)
ภาษา JavaและAdaมีเพียงการล็อกแบบพิเศษเท่านั้น เนื่องจากเป็นภาษาที่ใช้เธรดและอาศัย คำสั่ง เปรียบเทียบและสลับ (compare-and-swap)ในโปรเซสเซอร์
รากฐานทางคณิตศาสตร์เชิงนามธรรมสำหรับกลไกการซิงโครไนซ์นั้นได้มาจากฮิสโทสิสโมโนอิดนอกจากนี้ยังมีกลไกทางทฤษฎีระดับสูงอีกมากมาย เช่นแคลคูลัสกระบวนการและเน็ตเพทรีซึ่งสามารถสร้างขึ้นบนพื้นฐานของฮิสโทสิสโมโนอิดได้
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างการซิงโครไนซ์บางส่วนที่เกี่ยวข้องกับแพลตฟอร์มต่างๆ[ 17 ]
ใน Windows
ระบบปฏิบัติการ Windowsมีคุณสมบัติดังนี้:
- หน้ากากขัดจังหวะซึ่งทำหน้าที่ป้องกันการเข้าถึงทรัพยากรส่วนกลาง (ส่วนวิกฤต) ในระบบโปรเซสเซอร์เดี่ยว
- สปินล็อกซึ่งป้องกันไม่ให้เธรดสปินล็อกถูกขัดจังหวะในระบบมัลติโปรเซสเซอร์
- ตัวจัดการการส่งคำสั่งแบบไดนามิกซึ่งทำหน้าที่คล้ายกับมิวเท็กซ์เซ มา ฟอร์อีเวนต์และตัวจับเวลา
ในลินุกซ์
ลินุกซ์มีคุณสมบัติดังต่อไปนี้:
- สัญญาณธง ;
- สปินล็อก ;
- สิ่งกีดขวาง ;
- มิวเท็กซ์ ;
- ตัวล็อกแบบอ่าน-เขียนสำหรับส่วนของรหัสที่ยาวกว่า ซึ่งมีการเข้าถึงบ่อยมาก แต่ไม่ค่อยมีการเปลี่ยนแปลงบ่อยนัก
- อ่าน-คัดลอก-อัปเดต (RCU) [ 18 ]
การเปิดและปิดใช้งานการแย่งชิงการทำงานของเคอร์เนลได้เข้ามาแทนที่สปินล็อกในระบบโปรเซสเซอร์เดี่ยว ก่อนเวอร์ชันเคอร์เนล 2.6 ลินุกซ์ได้ปิดใช้งานการขัดจังหวะเพื่อใช้ในการสร้างส่วนวิกฤตที่มีขนาดสั้น ตั้งแต่เวอร์ชัน 2.6 เป็นต้นไป ลินุกซ์สามารถแย่งชิงการทำงานได้อย่างสมบูรณ์
ใน Solaris
Solarisมีคุณสมบัติดังต่อไปนี้:
- สัญญาณไฟ
- ตัวแปรเงื่อนไข
- มิวเท็กซ์แบบปรับได้– เซมาฟอร์ไบนารีที่ถูกนำไปใช้แตกต่างกันไปตามเงื่อนไข[ 19 ]
- กลไกการล็อกระหว่างผู้อ่านและผู้เขียน
- ประตูหมุน – คิวของเธรดที่รอการล็อกที่ได้รับ[ 20 ]
ใน Pthreads
Pthreadsเป็นAPI ที่ไม่ขึ้นกับแพลตฟอร์มใดๆ และมีคุณสมบัติดังต่อไปนี้:
- มิวเท็กซ์;
- ตัวแปรเงื่อนไข;
- กลไกการล็อกระหว่างผู้อ่านและผู้เขียน;
- สปินล็อก;
- อุปสรรค
ดูเพิ่มเติม
- อนาคตและคำมั่นสัญญา กลไกการประสานงานในแบบแผนเชิงฟังก์ชันบริสุทธิ์
- กำแพงความจำ
ลิงก์ภายนอก
- กายวิภาคของวิธีการซิงโครไนซ์ใน Linuxที่ IBM developerWorks
- หนังสือสัญญาณธงฉบับย่อโดย อัลเลน บี. ดาวนีย์
- ความจำเป็นในการประสานกระบวนการ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การซิงโครไนซ์ (วิทยาการคอมพิวเตอร์)
ใน วิทยาการคอมพิวเตอร์ การ ซิงโครไนซ์ คือการประสานงาน กระบวนการ หลายๆ กระบวนการ ให้รวมเข้าด้วยกันหรือ จับมือกัน ณ จุดใดจุดหนึ่ง เพื่อให้บรรลุข้อตกลงหรือดำเนินการตามลำดับที่กำหนดไว้
แรงจูงใจ
ความจำเป็นในการซิงโครไนซ์ไม่ได้เกิดขึ้นเฉพาะในระบบมัลติโปรเซสเซอร์เท่านั้น แต่ยังเกิดขึ้นกับกระบวนการทำงานพร้อมกันทุกประเภท แม้กระทั่งในระบบโปรเซสเซอร์เดี่ยว ต่อไปนี้คือความจำเป็นหลักบางประการสำหรับการซิงโครไนซ์:
ความต้องการ
การซิงโครไนซ์เธรดถูกกำหนดให้เป็นกลไกที่รับประกันว่า กระบวนการ หรือ เธรดที่ ทำงานพร้อมกันสองกระบวนการขึ้นไปจะไม่ดำเนินการส่วนของโปรแกรมที่เรียกว่า ส่วนวิกฤต พร้อมกัน การเข้าถึงส่วนวิกฤตของกระบวนการจะถูกควบคุมโดยใช้เทคนิคการซิงโครไนซ์...
การลดให้เหลือน้อยที่สุด
หนึ่งในความท้าทายสำหรับการออกแบบอัลกอริทึมระดับเอ็กซาสเกลคือการลดหรือลดการซิงโครไนซ์ การซิงโครไนซ์ใช้เวลานานกว่าการคำนวณ โดยเฉพาะอย่างยิ่งในการประมวลผลแบบกระจาย การลดการซิงโครไนซ์ดึงดูดความสนใจจากนักวิทยาศาสตร์คอมพิวเตอร์มานานหลายทศวรรษ...