การควบคุมภาวะพร้อมกันคืออะไร?

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

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

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

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

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