การพิสูจน์ว่าโปรแกรม "thread ปลอดภัย" นั้นยาก อย่างไรก็ตามเป็นไปได้ที่จะกำหนดคำว่า "data race" อย่างเป็นรูปธรรมและเป็นทางการ และเป็นไปได้ที่จะตรวจสอบว่าการติดตามการดำเนินการของการทำงานเฉพาะของโปรแกรมทำหรือไม่มีการแย่งข้อมูลในเวลาตามสัดส่วนกับขนาดของการติดตาม การวิเคราะห์ประเภทนี้ย้อนกลับไปอย่างน้อยปี 1988: Barton P. Miller, Jong-Deok Choi, "กลไกสำหรับการดีบักโปรแกรมขนานที่มีประสิทธิภาพ", Conf บน Prog หรั่ง Dsgn และ Impl (PLDI-1988): 135-144
จากการติดตามการดำเนินการครั้งแรกเรากำหนดสิ่งที่เกิดขึ้นก่อนเหตุการณ์บางส่วนระหว่างเหตุการณ์ในการติดตาม ได้รับทั้งสองเหตุการณ์และที่เกิดขึ้นในหัวข้อเดียวกันแล้วหรือ<a (เหตุการณ์ในรูปแบบเธรดเดียวกันมีการสั่งซื้อทั้งหมดที่กำหนดโดยซีแมนทิกส์ต่อเนื่องของภาษาการเขียนโปรแกรม) เหตุการณ์การซิงโครไนซ์ (ซึ่งอาจเป็น mutex เพื่อรับและเผยแพร่เป็นต้น) ให้อินเตอร์เธรดเพิ่มเติมเกิดขึ้น (หากเธรดปล่อย mutex และจากนั้นเธรดจะได้รับ mutex นั้นเราจะบอกว่าการปล่อยเกิดขึ้นก่อนที่จะได้รับ)aขa < bb < aST
จากนั้นให้การเข้าถึงข้อมูลสองครั้ง(อ่านหรือเขียนไปยังตัวแปรที่ไม่ใช่ตัวแปรการซิงโครไนซ์)และที่อยู่ในตำแหน่งหน่วยความจำเดียวกัน แต่โดยเธรดที่แตกต่างกันและที่หรือเป็นการดำเนินการเขียนเราบอกว่ามีข้อมูล การแข่งขันระหว่างและถ้าค่ามิได้<aaขaขaba<bb<a
มาตรฐานC ++ 11เป็นตัวอย่างที่ดี (ส่วนที่เกี่ยวข้องคือ 1.10 ในรายละเอียดแบบร่างที่มีให้ทางออนไลน์) C ++ 11 แยกความแตกต่างระหว่างวัตถุการซิงโครไนซ์ (mutexes และตัวแปรที่ประกาศด้วยatomic<>
ชนิด) และข้อมูลอื่น ๆ ทั้งหมด ข้อมูลจำเพาะ C ++ 11 บอกว่าโปรแกรมเมอร์สามารถให้เหตุผลเกี่ยวกับการเข้าถึงข้อมูลในการติดตามของโปรแกรมแบบมัลติเธรดราวกับว่ามันเป็นไปตามลำดับที่สอดคล้องกันหากการเข้าถึงข้อมูลนั้นไม่มีการแข่งขันด้านข้อมูลทั้งหมด
เครื่องมือ Helgrind (ส่วนหนึ่งของ Valgrind) ทำการตรวจจับข้อมูลที่เกิดขึ้นก่อนหน้านี้เช่นเดียวกับเครื่องมือเชิงพาณิชย์หลายอย่าง (เช่น Intel Inspector XE) อัลกอริธึมในเครื่องมือที่ทันสมัยขึ้นอยู่กับการรักษานาฬิกาเวกเตอร์ที่เกี่ยวข้องกับทุกเธรดและการซิงโครไนซ์ วัตถุ. ฉันคิดว่าเทคนิคการใช้นาฬิกาเวกเตอร์สำหรับการตรวจจับการแข่งขันข้อมูลนั้นเป็นผู้บุกเบิกโดยMichiel Ronsse; Koen De Bosschere: "RecPlay: ระบบบันทึก / เล่นซ้ำแบบครบวงจร", ACM Trans คอมพิวเต Syst 17 (2): 133-152 1999