กลับไปหน้าบทความ

อ่าน 5 นาที

การซิงโครไนซ์ (วิทยาการคอมพิวเตอร์)

ใน วิทยาการคอมพิวเตอร์ การ ซิงโครไนซ์ คือการประสานงาน กระบวนการ หลายๆ กระบวนการ ให้รวมเข้าด้วยกันหรือ จับมือกัน ณ จุดใดจุดหนึ่ง เพื่อให้บรรลุข้อตกลงหรือดำเนินการตามลำดับที่กำหนดไว้

การซิงโครไนซ์ (วิทยาการคอมพิวเตอร์)

ในวิทยาการคอมพิวเตอร์การซิงโครไนซ์คือการประสานงานกระบวนการ หลายๆ กระบวนการ ให้รวมเข้าด้วยกันหรือจับมือกันณ จุดใดจุดหนึ่ง เพื่อให้บรรลุข้อตกลงหรือดำเนินการตามลำดับที่กำหนดไว้

แรงจูงใจ

ความจำเป็นในการซิงโครไนซ์ไม่ได้เกิดขึ้นเฉพาะในระบบมัลติโปรเซสเซอร์เท่านั้น แต่ยังเกิดขึ้นกับกระบวนการทำงานพร้อมกันทุกประเภท แม้กระทั่งในระบบโปรเซสเซอร์เดี่ยว ต่อไปนี้คือความจำเป็นหลักบางประการสำหรับการซิงโครไนซ์:

การแยกและการรวม :เมื่องานมาถึงจุดแยก งานนั้นจะถูกแบ่งออกเป็นงานย่อย N งาน ซึ่งแต่ละงานย่อยจะได้รับการประมวลผลโดยงานหลัก N งาน หลังจากได้รับการประมวลผลแล้ว งานย่อยแต่ละงานจะรอจนกว่างานย่อยอื่นๆ ทั้งหมดจะประมวลผลเสร็จสิ้น จากนั้นจึงรวมเข้าด้วยกันอีกครั้งและออกจากระบบ ดังนั้น การเขียนโปรแกรมแบบขนานจึงต้องการการซิงโครไนซ์ เนื่องจากกระบวนการแบบขนานทั้งหมดต้องรอให้กระบวนการอื่นๆ อีกหลายกระบวนการเสร็จสิ้น

ผู้ผลิต-ผู้บริโภค:ในความสัมพันธ์ระหว่างผู้ผลิตและผู้บริโภค กระบวนการของผู้บริโภคจะขึ้นอยู่กับกระบวนการของผู้ผลิตจนกว่าข้อมูลที่จำเป็นจะถูกผลิตขึ้น

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

ความต้องการ

รูปที่ 1 : กระบวนการสามกระบวนการเข้าถึงทรัพยากรที่ใช้ร่วมกัน ( ส่วนวิกฤต ) พร้อมกัน

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

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

รูปที่ 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มีคุณสมบัติดังนี้:

ในลินุกซ์

ลินุกซ์มีคุณสมบัติดังต่อไปนี้:

การเปิดและปิดใช้งานการแย่งชิงการทำงานของเคอร์เนลได้เข้ามาแทนที่สปินล็อกในระบบโปรเซสเซอร์เดี่ยว ก่อนเวอร์ชันเคอร์เนล 2.6 ลินุกซ์ได้ปิดใช้งานการขัดจังหวะเพื่อใช้ในการสร้างส่วนวิกฤตที่มีขนาดสั้น ตั้งแต่เวอร์ชัน 2.6 เป็นต้นไป ลินุกซ์สามารถแย่งชิงการทำงานได้อย่างสมบูรณ์

ใน Solaris

Solarisมีคุณสมบัติดังต่อไปนี้:

ใน Pthreads

Pthreadsเป็นAPI ที่ไม่ขึ้นกับแพลตฟอร์มใดๆ และมีคุณสมบัติดังต่อไปนี้:

  • มิวเท็กซ์;
  • ตัวแปรเงื่อนไข;
  • กลไกการล็อกระหว่างผู้อ่านและผู้เขียน;
  • สปินล็อก;
  • อุปสรรค

ดูเพิ่มเติม

  • กายวิภาคของวิธีการซิงโครไนซ์ใน Linuxที่ IBM developerWorks
  • หนังสือสัญญาณธงฉบับย่อโดย อัลเลน บี. ดาวนีย์
  • ความจำเป็นในการประสานกระบวนการ
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Synchronization_(computer_science)&oldid=1348673403 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การซิงโครไนซ์ (วิทยาการคอมพิวเตอร์)

ใน วิทยาการคอมพิวเตอร์ การ ซิงโครไนซ์ คือการประสานงาน กระบวนการ หลายๆ กระบวนการ ให้รวมเข้าด้วยกันหรือ จับมือกัน ณ จุดใดจุดหนึ่ง เพื่อให้บรรลุข้อตกลงหรือดำเนินการตามลำดับที่กำหนดไว้

แรงจูงใจ

ความจำเป็นในการซิงโครไนซ์ไม่ได้เกิดขึ้นเฉพาะในระบบมัลติโปรเซสเซอร์เท่านั้น แต่ยังเกิดขึ้นกับกระบวนการทำงานพร้อมกันทุกประเภท แม้กระทั่งในระบบโปรเซสเซอร์เดี่ยว ต่อไปนี้คือความจำเป็นหลักบางประการสำหรับการซิงโครไนซ์:

ความต้องการ

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

การลดให้เหลือน้อยที่สุด

หนึ่งในความท้าทายสำหรับการออกแบบอัลกอริทึมระดับเอ็กซาสเกลคือการลดหรือลดการซิงโครไนซ์ การซิงโครไนซ์ใช้เวลานานกว่าการคำนวณ โดยเฉพาะอย่างยิ่งในการประมวลผลแบบกระจาย การลดการซิงโครไนซ์ดึงดูดความสนใจจากนักวิทยาศาสตร์คอมพิวเตอร์มานานหลายทศวรรษ...