เป็นไปได้ที่จะพิสูจน์ความปลอดภัยของด้ายหรือไม่


10

ให้โปรแกรมประกอบด้วยตัวแปรและคำแนะนำที่แก้ไขตัวแปรเหล่านี้และดั้งเดิมการซิงโครไนซ์ (จอภาพ, mutex, การซิงโครไนส์ของ java หรือการล็อกของ C #) เป็นไปได้ไหมที่จะพิสูจน์ว่าโปรแกรมดังกล่าวปลอดภัยหรือไม่?

มีรูปแบบที่เป็นทางการสำหรับอธิบายสิ่งต่าง ๆ เช่นความปลอดภัยของด้ายหรือสภาพการแข่งรถหรือไม่?


2
ใช่ แต่ภาษาในโลกแห่งความเป็นจริงอาจเป็นความเจ็บปวดในตูดเนื่องจากความหมายที่เกิดขึ้นพร้อมกันของพวกเขาไม่ได้กำหนด / คงที่ไว้อย่างดีเสมอไป นอกจากนี้ทุกอย่างจะไม่สามารถตัดสินใจได้ในทุกรุ่น มันเป็นทุ่งกว้าง google "ทฤษฎีการทำงานพร้อมกัน" เพื่อสร้างความประทับใจ โดยเฉพาะอย่างยิ่งมีทฤษฎีมากมายที่เกี่ยวข้องกับมุ้ง Petri
Raphael

คำตอบ:


10

การพิสูจน์ว่าโปรแกรม "thread ปลอดภัย" นั้นยาก อย่างไรก็ตามเป็นไปได้ที่จะกำหนดคำว่า "data race" อย่างเป็นรูปธรรมและเป็นทางการ และเป็นไปได้ที่จะตรวจสอบว่าการติดตามการดำเนินการของการทำงานเฉพาะของโปรแกรมทำหรือไม่มีการแย่งข้อมูลในเวลาตามสัดส่วนกับขนาดของการติดตาม การวิเคราะห์ประเภทนี้ย้อนกลับไปอย่างน้อยปี 1988: Barton P. Miller, Jong-Deok Choi, "กลไกสำหรับการดีบักโปรแกรมขนานที่มีประสิทธิภาพ", Conf บน Prog หรั่ง Dsgn และ Impl (PLDI-1988): 135-144

จากการติดตามการดำเนินการครั้งแรกเรากำหนดสิ่งที่เกิดขึ้นก่อนเหตุการณ์บางส่วนระหว่างเหตุการณ์ในการติดตาม ได้รับทั้งสองเหตุการณ์และที่เกิดขึ้นในหัวข้อเดียวกันแล้วหรือ<a (เหตุการณ์ในรูปแบบเธรดเดียวกันมีการสั่งซื้อทั้งหมดที่กำหนดโดยซีแมนทิกส์ต่อเนื่องของภาษาการเขียนโปรแกรม) เหตุการณ์การซิงโครไนซ์ (ซึ่งอาจเป็น mutex เพื่อรับและเผยแพร่เป็นต้น) ให้อินเตอร์เธรดเพิ่มเติมเกิดขึ้น (หากเธรดปล่อย mutex และจากนั้นเธรดจะได้รับ mutex นั้นเราจะบอกว่าการปล่อยเกิดขึ้นก่อนที่จะได้รับ)aba<bb<aST

จากนั้นให้การเข้าถึงข้อมูลสองครั้ง(อ่านหรือเขียนไปยังตัวแปรที่ไม่ใช่ตัวแปรการซิงโครไนซ์)และที่อยู่ในตำแหน่งหน่วยความจำเดียวกัน แต่โดยเธรดที่แตกต่างกันและที่หรือเป็นการดำเนินการเขียนเราบอกว่ามีข้อมูล การแข่งขันระหว่างและถ้าค่ามิได้<aabababa<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


6

จากด้าน pratical มีระบบตรวจสอบVCCซึ่งสามารถใช้เพื่อพิสูจน์ความปลอดภัยของเธรดอย่างเป็นทางการของโปรแกรม C

นี่คือการอ้างอิงจากเว็บไซต์:

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


2
มันทำงานยังไง? แบบจำลองพื้นฐานที่เป็นทางการคืออะไร? โปรดทราบว่า OP ไม่เพียง แต่ขอเครื่องมือ!
Raphael

1

นี่เป็นพื้นที่ที่ยากมากที่จะรับรองความถูกต้องของโปรแกรมตราบใดที่พิจารณาสภาพการแข่งขันซึ่งเป็น "จุดอ่อนส้นเท้า" ของการประมวลผลแบบขนาน วิธีที่ดีที่สุดสำหรับความถูกต้องของโปรแกรมคือโดยทั่วไปแล้วเพื่อหลีกเลี่ยงการใช้งานดั้งเดิมในระดับต่ำและทำงานกับรูปแบบการออกแบบระดับสูงกว่า (เช่นจากไลบรารี) ที่รับประกันการซิงโครไนซ์เธรด มีCSPรุ่นเดียวที่สื่อสารกระบวนการต่อเนื่องโดย Hoare ซึ่งมีการพิสูจน์ความถูกต้องเนื่องจากนักพัฒนา จำกัด ตัวเองไว้ที่ "framework" มันมีความคล้ายคลึงกันทางความคิดและลำดับเหตุการณ์ / การทับซ้อน / ทับซ้อนกับยูนิกซ์"ท่อและตัวกรอง"แม้ว่า havent (หรือยัง) พบการเชื่อมโยงโดยตรงระหว่างทั้งสอง

อีกสองเฟรมเวิร์กที่พยายามปรับปรุงความถูกต้องแบบขนานผ่านรูปแบบการออกแบบและมีอัลกอริทึม / รูปแบบการออกแบบ / มาตรฐานที่เป็นที่รู้จักมากที่สุดสำหรับจุดประสงค์นี้:


1
นี่อาจเป็นคำแนะนำที่ดี (การเขียนโปรแกรม) แต่ก็ไม่ตอบคำถาม (CS) เลย
Raphael

1
?!? คำวิจารณ์นั้นไม่เจาะจงเลย
vzn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.