วิธีทดสอบและการใช้งาน mutex มาตรฐาน


12

ตามที่ชื่อบอกไว้: คุณจะทดสอบและเปรียบเทียบการใช้งาน mutexes ใน c ++ อย่างไร?

โดยพื้นฐานแล้วฉันเขียน std :: mutex เหมือนคลาสสำหรับโครงการที่รันบน 2 คอร์ armv7 โดยมีจุดประสงค์เพื่อลดค่าใช้จ่ายในกรณีที่ไม่มีการโต้แย้ง ตอนนี้ฉันกำลังพิจารณาใช้ mutex ที่กล่าวไว้ในที่ต่าง ๆ และสถาปัตยกรรมที่แตกต่างกัน แต่ก่อนที่ฉันจะทำสิ่งนี้

  • มันถูกต้องจริง
  • ไม่มีกรณีพยาธิวิทยาใดที่มันทำงานได้แย่กว่า std มาตรฐาน :: mutex มาก

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

  • ดังนั้นมีเทคนิคการวิเคราะห์แบบคงที่หรือแบบไดนามิกหรือไม่?
  • ข้อผิดพลาดทั่วไปเมื่อเขียนการทดสอบหน่วยสำหรับคลาส mutex คืออะไร
  • สิ่งที่ขอบกรณีทั่วไปควรระวัง (ประสิทธิภาพฉลาด) คืออะไร?

ฉันใช้ไลบรารีมาตรฐานชนิดสำหรับการใช้งานเท่านั้นซึ่งรวมถึงการดำเนินการโหลดและจัดเก็บที่ไม่ต่อเนื่องตามลำดับบน atomics อย่างไรก็ตามฉันสนใจที่จะแนะนำการใช้งานแบบไม่เชื่อเรื่องพระเจ้าเนื่องจากฉันต้องการใช้ชุดทดสอบที่เหมือนกันสำหรับการใช้งานอื่นเช่นกัน


2
ฉันรู้ว่าไม่จำเป็น แต่ฉันขอขอบคุณถ้าผู้ลงคะแนนจะแสดงความคิดเห็นเกี่ยวกับปัญหาที่เกิดขึ้นกับคำถามนี้ ฉันใหม่สำหรับ SE และไม่คุ้นเคยอย่างสมบูรณ์กับข้อกำหนดของไซต์นี้
MikeMB

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

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

@ user1118321: เมตาโพสต์นั้นไม่เหมาะกับคำถามนี้เนื่องจาก IMHO ไม่มีข้อสันนิษฐานที่ไม่สมบูรณ์ในคำถามนี้ อย่างไรก็ตามสองในสามของคะแนนปิดที่ฉันเห็นอยู่ในขณะนี้กำลังใช้เหตุผลปิด "คำขอทรัพยากรบุคคลที่สาม" ที่กำหนดไว้ล่วงหน้า MikeMB คุณสามารถลองแก้ไขคำถามของคุณและนำชิ้นส่วนเหล่านั้นออกจากมันได้อย่างไรก็ตามในรูปแบบปัจจุบันฉันคิดว่าชุมชนสามารถปิดได้เพราะกว้างเกินไป หากคุณ จำกัด ขอบเขตของคำถามให้แคบลงและถามเฉพาะสิ่งที่คุณต้องการทดสอบและสิ่งที่คุณพยายามทำจนถึงตอนนี้คุณอาจเพิ่มโอกาสในการอยู่รอดของคำถาม
Doc Brown

ปัญหาหนึ่งของคำถามนี้คือ "คำถามที่ขอให้เราค้นหาหรือแนะนำเครื่องมือห้องสมุดภาษาการเขียนโปรแกรมแหล่งข้อมูล (รวมถึงหนังสือบล็อกบทแนะนำและตัวอย่าง) หรือโครงการที่ต้องดำเนินการอยู่นอกประเด็น จะไม่มีคุณค่าต่อผู้อื่นอย่างยั่งยืน "
David Hammen

คำตอบ:


1

ปัญหาซับซ้อน:

แหล่งที่มาของความซับซ้อน ได้แก่ :

  • มีการสลับบริบทจำนวนเท่าใด: สิ่งนี้สำคัญมากขึ้นอยู่กับแพลตฟอร์มที่การทดสอบเหล่านี้ทำงาน บางแพลตฟอร์มจัดการสิ่งนี้ได้ดีกว่าแพลตฟอร์มอื่น
  • ฟังก์ชั่นที่ mutexes ได้รับการทดสอบแบบอินไลน์หรือไม่ นั่นคือ mutex ทำงานได้ดีในรหัสที่ได้รับการปรับปรุงหรือดีที่สุดเท่านั้น
  • mutexes เหล่านี้ออกแบบมาเพื่อใช้กับแคชหรือไม่ แคชจะลดประสิทธิภาพลงอย่างมากหรือทำให้สวิตช์บริบทมากขึ้น ก่อนและหลังการป้อน mutex
  • Mutex เองจะทำให้สูญเสียตำแหน่งแคชหรือไม่ ie คือข้อมูลสถานะ mutex ที่จัดสรรแบบไดนามิก
  • Mutexes เหล่านี้จะทำงานได้ดีหรือไม่หากมีบริบทสวิตช์อยู่ภายใน Mutex เช่น io, malloc เป็นต้น
  • mutex ทำงานได้ดีหรือไม่เวลาเคอร์เนลจะอยู่ในการจัดสรรหน่วยความจำแบบไดนามิกและการจัดการดีล
  • ประสิทธิภาพนี้ทำงานเมื่อทำงานภายใน VM หรือไม่
  • การทำลายหรือการสร้าง mutex แพงเช่นข้อมูลรัฐตั้งอยู่ในหน่วยความจำแบบไดนามิก

1
ไม่แน่ใจว่าฉันเห็นด้วยกับส่วนก่อสร้าง / ทำลาย หากโปรแกรมกำลังสร้างและทำลาย mutexes ของคุณตลอดเวลามีบางสิ่งที่ผิดปกติกับการออกแบบการออกแบบ แต่อย่างอื่นขอบคุณสำหรับพอยน์เตอร์
MikeMB

-1

ความคิดของคุณน่าสนใจมาก: มาตรฐานการปฏิบัติตามซึ่งสามารถใช้ทดสอบ mutex ได้

น่าเสียดายที่เท่าที่ฉันเห็นไม่มีมาตรฐานการปฏิบัติตามที่รู้จักกันอย่างแพร่หลายสำหรับการใช้งาน mutex ดังนั้นฉันคิดว่าคุณมีปัญหาที่น่าสนใจอย่างมากในการสร้างข้อเสนอสำหรับเกณฑ์มาตรฐานดังกล่าว

และเนื่องจากคุณมีส่วนร่วมในการสร้างการใช้งานเกณฑ์มาตรฐานคุณจึงเป็นคนที่แต่งตัวประหลาด

หากคุณให้คำแนะนำกับฉันบางทีคุณอาจเริ่มต้นการวิจัยนี้ด้วยมาตรฐาน POSIX สำหรับเธรดในด้านหนึ่งและการศึกษาวรรณกรรมทางทฤษฎีเกี่ยวกับการประมวลผลที่เกิดขึ้นพร้อมกันเช่น CSP หรือกระบวนการสื่อสารตามลำดับ เอกสารประเภทนี้มักจะเกี่ยวข้องกับปัญหาที่เกิดขึ้นพร้อมกันแบบคลาสสิกเช่นนักปรัชญาการรับประทานอาหาร

การใช้งานของพวกเขาอาจเป็นส่วนหนึ่งที่น่าสนใจของมาตรฐานการปฏิบัติตามของคุณฉันเดา


3
ฉันไม่ได้ลงคะแนนให้คุณ แต่ดูเหมือนจะไม่ตอบคำถามของฉัน
MikeMB

ขอบคุณสำหรับการไม่ลงคะแนน และขออภัยที่ไม่ตอบคำถามของคุณ คุณจะรังเกียจไหมถ้าฉันถามคุณว่าคุณกำลังพิจารณาที่จะสร้างมาตรฐานการปฏิบัติตามสำหรับ mutexes หรือไม่?
Hilton Fernandes

ไม่แน่ และแม้ว่าฉันเป็นมาตรฐานเดียวที่ฉันสนใจคือมาตรฐาน c ++ (แม้ว่าอาจจะเหมือนกับ posix ที่เกี่ยวกับ mutexes)
MikeMB

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

ฉันเห็นด้วยกับคุณว่าไม่มีชุดทดสอบที่ดีสำหรับการทดสอบเบื้องต้นของ mutex ฉันคิดว่ามันควรมาจากสามแหล่งที่แตกต่างกัน: ทฤษฎีของการประมวลผลพร้อมกัน, สเปคของ POSIX mutex, และอัลกอริธึมที่เกิดขึ้นพร้อมกันโดยใช้ mutexes คุณเห็นด้วยไหม
Hilton Fernandes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.