1
วิธีสอบถามและเพิ่มมูลค่า (ตัวนับ) ในวิธีที่ปลอดภัยต่อเธรด (หลีกเลี่ยงสภาพการแข่งขัน)
ในตารางที่แต่ละแถวมีเคาน์เตอร์ (เพียงค่าจำนวนเต็ม) ผมจำเป็นต้องได้รับค่าปัจจุบันและเพิ่มขึ้นในเวลาเดียวกัน อย่างมีประสิทธิภาพฉันต้องการทำสิ่งนี้: SELECT counter FROM table WHERE id=123 UPDATE table SET counter=counter+1 WHERE id=123 แต่การทำเช่นนี้เนื่องจากเคียวรีสองรายการนั้นไม่ปลอดภัยสำหรับเธรด: หลายกระบวนการที่ทำสิ่งเดียวกัน (ในแถวเดียวกัน) อาจได้รับค่าตัวนับเดียวกัน ฉันต้องการให้ทุกอย่างไม่ซ้ำกันดังนั้นแต่ละกระบวนการจะได้รับมูลค่าปัจจุบันตามจริงและเพิ่มขึ้นทีละรายการ ฉันสามารถนึกถึงการก่อสร้างที่ฉันใช้การล็อกแบบแมนนวลต่อแถว แต่ฉันสงสัยว่าจะมีวิธีที่ง่ายกว่านี้หรือไม่