TL; DRอัสสัมชัญ ("สัญญา") ของการเสแสร้งปลอมคือการตัดสินใจทางสถาปัตยกรรมที่สมเหตุสมผลที่ทำขึ้นเพื่ออนุญาตให้มีการใช้งานที่แข็งแกร่งอย่างแนบเนียนของเครื่องมือจัดการเธรด
"การพิจารณาประสิทธิภาพ" ไม่เกี่ยวข้องที่นี่สิ่งเหล่านี้เป็นเพียงความเข้าใจผิดที่เริ่มแพร่หลายเนื่องจากมีการระบุไว้ในเอกสารอ้างอิงที่เชื่อถือได้ที่ตีพิมพ์ (การอ้างอิงที่เชื่อถือได้อาจมีข้อผิดพลาด y'know - เพียงแค่ถามกาลิเลโอกาลิลี )บทความ Wikipedia เก็บการอ้างอิงถึงบันทึกย่อที่คุณยกมาเพียงเพราะมันตรงกับแนวทางอย่างเป็นทางการของการอ้างอิงการอ้างอิงที่เผยแพร่
เหตุผลที่น่าสนใจมากขึ้นสำหรับการแนะนำแนวคิดของการหลอกลวงแบบปลอมมีไว้ในคำตอบที่ SOซึ่งมีพื้นฐานจากรายละเอียดเพิ่มเติมที่มีให้ในบทความ (ในเวอร์ชั่นที่เก่ากว่า) ของบทความนั้นมาก:
บทความวิกิพีเดียเกี่ยวกับการปลอมแปลงมีการขโมยอาหารอันโอชะนี้:
มีการpthread_cond_wait()
ใช้งานฟังก์ชันใน Linux โดยใช้การfutex
เรียกของระบบ การเรียกระบบการบล็อกแต่ละครั้งบน Linux จะส่งคืนทันทีEINTR
เมื่อกระบวนการได้รับสัญญาณ ... pthread_cond_wait()
ไม่สามารถเริ่มการรอได้เนื่องจากอาจพลาดการปลุกที่แท้จริงในเวลาเพียงเล็กน้อยนอกfutex
ระบบโทร
ลองคิดดูสิ ... เช่นเดียวกับรหัสใด ๆ ตัวจัดตารางเวลาเธรดอาจมีความผิดพลาดชั่วคราวเนื่องจากมีสิ่งผิดปกติเกิดขึ้นในฮาร์ดแวร์ / ซอฟต์แวร์พื้นฐาน แน่นอนควรใช้ความระมัดระวังเพื่อให้สิ่งนี้เกิดขึ้นน้อยที่สุดเท่าที่จะเป็นไปได้ แต่เนื่องจากไม่มีสิ่งใดที่เป็นซอฟต์แวร์ที่แข็งแกร่ง 100% จึงมีเหตุผลที่จะถือว่าสิ่งนี้สามารถเกิดขึ้นได้และดูแลการกู้คืนที่สง่างาม โดยการสังเกตการเต้นของหัวใจที่หายไป)
ตอนนี้ตัวจัดกำหนดการสามารถกู้คืนได้อย่างไรโดยคำนึงว่าในระหว่างที่มีการปิดบังข้อมูลอาจมีสัญญาณบางอย่างที่ตั้งใจแจ้งให้ทราบถึงการรอเธรด หากตัวกำหนดตารางเวลาไม่ทำอะไรเลยการกล่าวถึงเธรด "โชคร้าย" จะหยุดรอตลอดไป - เพื่อหลีกเลี่ยงปัญหานี้ตัวกำหนดตารางเวลาจะส่งสัญญาณไปยังเธรดที่รออยู่ทั้งหมด
สิ่งนี้ทำให้จำเป็นในการสร้าง "สัญญา" ที่รอเธรดสามารถแจ้งเตือนได้โดยไม่มีเหตุผล เพื่อความแม่นยำจะมีเหตุผล - ตัวกำหนดเวลาปิดทึบ - แต่เนื่องจากเธรดได้รับการออกแบบ (เพื่อเหตุผลที่ดี) เพื่อลบเลือนรายละเอียดการใช้งานตัวกำหนดเวลาภายในด้วยเหตุผลนี้น่าจะดีกว่าที่จะแสดงเป็น "ปลอม"
จากมุมมองของกระทู้สิ่งนี้ค่อนข้างคล้ายกับกฎของ Postel (หรือที่เรียกว่าหลักการความทนทาน )
ระมัดระวังในสิ่งที่คุณทำมีอิสระในสิ่งที่คุณยอมรับจากผู้อื่น
การสันนิษฐานว่ามีการเสแสร้งการปลุกปั่นให้ทำอย่างระมัดระวังในสิ่งที่มันทำ : ตั้งเงื่อนไขเมื่อแจ้งหัวข้ออื่น ๆ และเปิดเสรีในสิ่งที่รับ : ตรวจสอบเงื่อนไขเมื่อกลับมาจากการรอและทำซ้ำถ้ายังไม่รอ