วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

2
จะหลีกเลี่ยงการทำซ้ำโครงสร้างข้อมูลเมื่อส่วนต่างของแอพเขียนเป็นภาษาอื่นได้อย่างไร
ตัวอย่างเช่นสมมติว่าคุณกำลังเขียนแอปในJava ของแอปสื่อสารกับเซิร์ฟเวอร์ API เขียนในหลาม เซิร์ฟเวอร์ Python สื่อสารกับฐานข้อมูลSQL นอกจากนี้คุณยังมีเว็บไซต์ของแอปเขียนในJavaScript ด้วย 4 ภาษาที่แตกต่างกันมันง่ายที่จะจบลงด้วยการทำซ้ำโครงสร้างข้อมูลเดิม 4 ครั้ง ตัวอย่างเช่นUserประเภทอาจมีลักษณะเช่นนี้ (pseudocode): type User { integer id; string name; timestamp birthday; } Userส่วนหนึ่งของโครงการทุกคนจะต้องชนิดของการแสดงบางอย่างสำหรับ ส่วนของ Java และ Python ต้องการclassการประกาศสองแบบที่ต่างกัน ฐานข้อมูลจะต้องมีUserการประกาศตาราง และเว็บไซต์ส่วนหน้าจะต้องเป็นตัวแทนUserด้วย การทำซ้ำประเภทนี้ 4 ครั้งแตกต่างกันจริงๆแบ่งห้ามทำซ้ำ-Yourselfหลักการ นอกจากนี้ยังมีปัญหาที่หากUserมีการเปลี่ยนแปลงประเภทการเปลี่ยนแปลงเหล่านี้จำเป็นต้องทำซ้ำในทุกส่วนของโครงการ ฉันรู้ว่าห้องสมุดprotobufของ Google นำเสนอวิธีการแก้ปัญหาที่คุณเขียนโครงสร้างข้อมูลโดยใช้ไวยากรณ์พิเศษจากนั้นห้องสมุดจะสร้างการประกาศโครงสร้างสำหรับคุณในภาษาการเขียนโปรแกรมหลายภาษา แต่สิ่งนี้ยังไม่ได้จัดการกับปัญหาของการต้องตรวจสอบตรรกะการตรวจสอบซ้ำสำหรับประเภทของคุณ ไม่มีใครมีคำแนะนำหรือลิงค์ไปยังหนังสือ / บล็อกโพสต์เกี่ยวกับเรื่องนี้หรือไม่?

4
คลาสควรสื่อสารกับผู้ใช้อย่างไร
สถานการณ์ เว็บแอ็พพลิเคชันกำหนดอินเทอร์เฟซผู้ใช้แบ็กเอนด์IUserBackendด้วยวิธีการ getUser (UID) CreateUser (UID) deleteUser (UID) setPassword (uid, รหัสผ่าน) ... แบ็กเอนด์ผู้ใช้ที่แตกต่างกัน (เช่น LDAP, SQL, ... ) ใช้อินเทอร์เฟซนี้ แต่ไม่ใช่แบ็กเอนด์ทุกคนสามารถทำทุกอย่างได้ ตัวอย่างเช่นเซิร์ฟเวอร์ LDAP ที่เป็นรูปธรรมไม่อนุญาตให้แอปพลิเคชันเว็บนี้ลบผู้ใช้ ดังนั้นLdapUserBackendคลาสที่ใช้จะไม่ดำเนินการIUserBackenddeleteUser(uid) คลาสที่เป็นรูปธรรมจำเป็นต้องสื่อสารกับเว็บแอ็พพลิเคชันว่าเว็บแอ็พพลิเคชันใดได้รับอนุญาตให้ทำกับผู้ใช้ของแบ็กเอนด์ วิธีแก้ปัญหาที่รู้จัก ฉันได้เห็นวิธีแก้ปัญหาที่IUserInterfaceมีimplementedActionsวิธีการที่ส่งกลับจำนวนเต็มซึ่งเป็นผลมาจากการ bitwise ORs ของการกระทำ bitwise ANDed กับการกระทำที่ร้องขอ: function implementedActions(requestedActions) { return (bool)( ACTION_GET_USER | ACTION_CREATE_USER | ACTION_DELTE_USER | ACTION_SET_PASSWORD ) & requestedActions) } ที่ไหน …

2
ฉันควรล็อคแถวในฐานข้อมูลคลาวด์ของฉันในขณะที่พวกเขากำลังแก้ไขโดยผู้ใช้
ฉันกำลังสร้างแอปพลิเคชันเดสก์ท็อปที่ยังคงมีข้อมูลในระบบคลาวด์ สิ่งหนึ่งที่ฉันกังวลคือการเริ่มต้นแก้ไขรายการในแอปพลิเคชันและปล่อยไว้ชั่วขณะหนึ่งทำให้ข้อมูลกลายเป็นเก่า สิ่งนี้สามารถเกิดขึ้นได้อย่างชัดเจนหาก 2 คนพยายามแก้ไขรายการเดียวกันในเวลาเดียวกัน เมื่อพวกเขาเสร็จสิ้นการแก้ไขและต้องการบันทึกข้อมูลฉันจะต้องเขียนทับสิ่งที่มีอยู่ในฐานข้อมูลหรือตรวจสอบว่าพวกเขาเริ่มแก้ไขหลังจากการเปลี่ยนแปลงครั้งล่าสุดและบังคับให้พวกเขาละทิ้งการเปลี่ยนแปลงหรืออาจให้พวกเขามีความเสี่ยง เขียนทับการเปลี่ยนแปลงของคนอื่น ฉันคิดถึงการเพิ่มเขตข้อมูลis_lockedและlock_timestampตาราง DB เมื่อผู้ใช้เริ่มแก้ไขรายการแถวจะเปลี่ยนis_lockedเป็นจริงและตั้งค่าการประทับเวลาล็อคเป็นเวลาปัจจุบัน ฉันจะมีเวลาบ้างที่จะล็อค (ตัวอย่างเช่น 5 นาที) หากบุคคลอื่นพยายามแก้ไขรายการพวกเขาจะได้รับข้อความแจ้งว่ารายการนั้นถูกล็อคและเมื่อการล็อคหมดอายุโดยอัตโนมัติ หากผู้ใช้เดินออกไปในขณะที่แก้ไขล็อคจะหมดอายุโดยอัตโนมัติหลังจากช่วงเวลาสั้น ๆ และเมื่อผู้ใช้จะได้รับการเตือนว่าล็อคหมดอายุและถูกบังคับให้รีสตาร์ทการแก้ไขหลังจากที่มีการรีเฟรชข้อมูล นี่จะเป็นวิธีที่ดีในการป้องกันการเขียนทับข้อมูลเก่าหรือไม่? มันเกินความจริงหรือเปล่า (ฉันไม่คาดหวังว่าแอปพลิเคชั่นจะมีผู้ใช้มากกว่าสองสามคนพร้อมกันในบัญชีเดียว) (ข้อกังวลอื่น ๆ ที่ฉันมีคือ 2 คนได้รับการล็อคสำหรับไอเท็มเดียวกัน แต่ฉันเชื่อว่าเป็นเงื่อนไขการแข่งขันที่ฉันพอใจ)

3
เมื่อใดที่โครงการ C ใหม่ควรตั้งเป้าหมายมาตรฐาน C ที่เก่ามาก (> 20 ปีเช่น C89)
บางครั้งฉันเห็นโครงการ C โอเพ่นซอร์สที่สำคัญและค่อนข้างใหม่ซึ่งมีเป้าหมายมาตรฐาน C ที่เก่ามากโดยทั่วไปคือ C89 ตัวอย่างคือ systemd โครงการเหล่านี้มีคนฉลาดอยู่ที่หางเสือดังนั้นพวกเขาอาจมีเหตุผลที่ดีหลังการตัดสินใจครั้งนี้ซึ่งฉันไม่รู้ ประโยชน์ที่ได้จากข้อสงสัยนั้นดูเหมือนว่าเหตุผลก็คือ "เก่ากว่าและมาตรฐานมักพกพาได้ดีกว่าและดีกว่า" ซึ่งไร้สาระเพราะข้อสรุปเชิงตรรกะคือ FORTRAN ดีกว่า C และ COBOL ดีกว่า FORTRAN เมื่อใดและเพราะเหตุใดโครงการ C ใหม่จึงกำหนดเป้าหมายมาตรฐาน C ที่เก่ามาก ฉันไม่สามารถจินตนาการถึงสถานการณ์ที่ระบบของผู้ใช้ต้องไม่อัปเดต C คอมไพเลอร์ แต่ไม่สามารถติดตั้งซอฟต์แวร์ใหม่ได้ ตัวอย่างเช่นเวอร์ชัน LTS ของ Debian มีแพ็กเกจ gcc 4.6 ซึ่งรองรับ C99 และ C11 บางส่วน ฉันเดาว่าต้องมีสถานการณ์แปลก ๆ และโปรแกรมเช่น systemd กำลังกำหนดเป้าหมายผู้ใช้เหล่านั้น ส่วนใหญ่กรณีการใช้งานที่เหมาะสมฉันสามารถจินตนาการเป็นที่ที่ผู้ใช้คาดว่าจะมีสถาปัตยกรรมที่แปลกใหม่ที่มีเพียงเรียบเรียง C89 ใช้ได้ แต่พวกเขาอย่างเต็มที่เต็มใจที่จะติดตั้งซอฟต์แวร์ใหม่ เนื่องจากความหลากหลายของสถาปัตยกรรมชุดการเรียนการสอนลดลงซึ่งดูเหมือนว่าเป็นสถานการณ์สมมุติมากเกินไป …
12 c  standards 

5
มีประโยชน์กับ mini-refactor code โดยหวังว่าจะปรับปรุงคุณภาพหรือเป็นเพียง“ การเคลื่อนย้ายโค้ดไปรอบ ๆ ” โดยไม่มีประโยชน์มาก?
ตัวอย่าง ฉันเจอรหัสเสาหินที่ทำ "ทุกอย่าง" ในที่เดียว - โหลดข้อมูลจากฐานข้อมูลแสดงมาร์กอัพ HTML ทำหน้าที่เป็นเราเตอร์ / คอนโทรลเลอร์ / การกระทำ ฉันเริ่มใช้การย้ายรหัสฐานข้อมูล SRP ไปยังไฟล์ของตัวเองโดยให้การตั้งชื่อที่ดีขึ้นสำหรับสิ่งต่าง ๆ และมันก็ดูดี แต่แล้วฉันก็เริ่มสงสัยว่าทำไมฉันถึงทำแบบนี้ ทำไมต้องรีแฟคเตอร์ จุดประสงค์คืออะไร? มันไร้ประโยชน์หรือเปล่า? ประโยชน์คืออะไร โปรดทราบว่าฉันส่วนใหญ่ออกจากไฟล์เสาหินตามที่เป็นอยู่ แต่ refactored เฉพาะส่วนเล็ก ๆ ที่เกี่ยวข้องกับพื้นที่ที่ฉันต้องทำงานบางอย่าง รหัสเดิม: เพื่อเป็นตัวอย่างที่เป็นรูปธรรมฉันได้พบข้อมูลโค้ดนี้ - มันโหลดข้อมูลจำเพาะของผลิตภัณฑ์โดยใช้รหัสผลิตภัณฑ์ที่รู้จักหรือโดยรหัสรุ่นที่ผู้ใช้เลือก: if ($verid) $sql1 = "SELECT * FROM product_spec WHERE id = " . clean_input($verid); else $sql1 = "SELECT …

2
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะสร้างบล็อคของรหัส?
ใน C ++ มันเป็นวิธีปฏิบัติที่ไม่ถูกต้องหรือไม่ในการสร้างบล็อกของโค้ดภายในฟังก์ชั่นบางอย่างเช่นต่อไปนี้: bool f() { { double test = 0; test = // some other variable outside this function, for example. if (test == // some value) return true; } { double test = 0; test = // some variable outside this function, different from the last one. …

5
ห้ามการเรียกฟังก์ชั่น / คลาสโดยพลการในรหัสภายนอก
ฉันเคยประสบกรณีที่จะมีประโยชน์ในการ จำกัด การเข้าถึง API ของไลบรารีภายนอกและกรอบงานเพื่อป้องกันผลกระทบด้านลบในระบบ ตัวอย่างเช่นในแอปพลิเคชัน SharePoint อาจดูเหมือนเป็นเรื่องปกติที่จะเรียกspList.Items.GetItemByIdเพื่อรับรายการแม้ในวงวนโดยไม่ทราบว่าสิ่งนี้สามารถนำไปสู่ปัญหาประสิทธิภาพการทำงานขนาดใหญ่ได้ อาจเป็นไปได้ว่าเราต้องห้ามการใช้ SmtpClient เพื่อบังคับให้ทุกคนใช้คลาสของเราในการส่งอีเมลเพื่อให้แน่ใจว่าเราสามารถใช้พร็อกซีและเยาะเย้ยทางอีเมลได้อย่างถูกต้องเมื่ออยู่ในสภาพแวดล้อมการทดสอบ มีวิธีที่เชื่อถือได้และตรงไปตรงมาอย่างสมเหตุสมผลในการบรรลุข้อ จำกัด เหล่านี้ในรหัสภายนอกยกเว้นจากบางสถานที่ในรหัสของเราเองหรือไม่? ไม่จำเป็นที่จะต้องป้องกันการเข้าถึงวิธีการ / ชั้นเรียนเหล่านี้อย่างแน่นอนเช่นโดยการไตร่ตรองหรือปิดการใช้งานบางประเภทมันควรเป็นคำเตือนที่เข้มงวดว่าพวกเขาไม่ควรใช้ บังคับให้โปรแกรมเมอร์ใช้มาตรการเพื่อแก้ไขข้อ จำกัด เหล่านี้หากเป็นไปได้ / จำเป็น

1
'ไวยากรณ์น้ำส้มสายชู' หมายถึงอะไร
ฉันอ่านGroovy in Action, Second Editionและจากเชิงอรรถฉันพบข้อความต่อไปนี้ Java เท "น้ำส้มสายชูไวยากรณ์" มากกว่าโครงสร้างเพื่อกีดกันโปรแกรมเมอร์จากการใช้มัน คำนี้syntax vinegarหมายถึงอะไรที่นี่? ฉันไม่เคยได้ยินคำนี้มาก่อนและค้นหาใน DuckDuckGo และ Google แต่ไม่พบความหมาย แต่มันถูกใช้ในหลาย ๆ ที่ มันจะดีถ้ามีใครสามารถอธิบายความหมายของคำนี้และนำไปใช้ในบริบทของการเขียนโปรแกรมภาษา หวังว่านี่จะถือว่าเป็นคำถามที่ถูกต้อง ไม่พบไซต์ stackexchange อื่นที่ฉันสามารถถามได้
12 java  syntax  groovy 

1
ทำไมสัญญาณที่เรียกว่าสัญญาณ?
สำหรับผมแล้วมันไม่ได้เป็นสัญญาณที่เซมาฟอร์รถไฟอธิบายเซมาฟอร์ได้ดีกว่าวัตถุส่งสัญญาณทั่วไปอื่น ๆ เช่นธงหรือสต็อปไลท์ แม้แต่บางอย่างเช่นพวงกุญแจ (ผู้คนนำกุญแจออกจากวงแหวนเพื่อเข้าถึงทรัพยากรที่ถูกล็อคจากนั้นส่งคืนเมื่อเสร็จสิ้น) เป็นคำอธิบายที่มากกว่า ดังนั้นสัญญาณที่เรียกว่าสัญญาณทำไม?
12 semaphore 

5
ฉันควรใช้จำนวนแกนประมวลผลเท่าไหร่ #cores หรือ #cores -1?
ฉันมีการคำนวณขนาดใหญ่ที่ต้องทำ ในขณะที่ฉันสามารถใช้ประโยชน์จากคอร์ทั้งหมดฉันคิดว่ามีเหตุผลอะไรที่จะละทิ้งคอร์ 1 แกนและไม่ใช้มัน (cpu การคำนวณเท่านั้นไม่มี IO) หรือฉันประเมินระบบปฏิบัติการต่ำเกินไปซึ่งไม่รู้ว่าจะจัดการและสลับบริบทที่เหมาะสมแม้ว่าฉันใช้ประโยชน์จากคอร์ทั้งหมดหรือไม่

3
วิธีทั่วไปในการจัดการการมองเห็นในไลบรารีคืออะไร?
คำถามนี้เกี่ยวกับเวลาที่จะใช้ส่วนตัวและเมื่อใดควรใช้การป้องกันในชั้นเรียนทำให้ฉันคิด (ฉันจะขยายคำถามนี้ไปยังคลาสและวิธีการขั้นสุดท้ายเนื่องจากมีความเกี่ยวข้องฉันกำลังเขียนโปรแกรมใน Java แต่ฉันคิดว่านี่เกี่ยวข้องกับทุกภาษา OOP) คำตอบที่ได้รับการยอมรับ: กฎง่ายๆคือทำทุกอย่างให้เป็นส่วนตัวที่สุด และอีกหนึ่ง: ทำให้คลาสทั้งหมดจบลงเว้นแต่ว่าคุณจะต้องการคลาสย่อยเหล่านั้นในทันที ทำให้วิธีการทั้งหมดเป็นขั้นสุดท้ายเว้นแต่ว่าคุณจะต้อง subclass และแทนที่พวกเขาทันที ทำพารามิเตอร์เมธอดทั้งหมดให้เป็นที่สุดเว้นแต่คุณจำเป็นต้องเปลี่ยนพารามิเตอร์ภายในเนื้อความของเมธอดซึ่งค่อนข้างน่าอึดอัดใจเกือบทุกครั้ง ค่อนข้างตรงไปตรงมาและชัดเจน แต่ถ้าฉันส่วนใหญ่เขียนไลบรารี่ (Open Source บน GitHub) แทนที่จะเป็นแอพพลิเคชั่น ฉันสามารถตั้งชื่อห้องสมุดและสถานการณ์มากมายได้ที่ไหน ห้องสมุดได้ขยายออกไปอย่างที่นักพัฒนาไม่เคยคิดมาก่อน สิ่งนี้จะต้องทำด้วย "class loader magic" และแฮ็กอื่น ๆ เนื่องจากข้อ จำกัด ในการมองเห็น ไลบรารี่ถูกนำไปใช้ในวิธีที่พวกเขาไม่ได้สร้างขึ้นมา ไม่สามารถใช้ไลบรารีเนื่องจากปัญหาเล็ก ๆ (ข้อผิดพลาดฟังก์ชันการทำงานที่ขาดหายไปพฤติกรรม "ผิด") ที่ไม่สามารถเปลี่ยนแปลงได้เนื่องจากการมองเห็นลดลง ปัญหาที่ไม่สามารถแก้ไขได้นำไปสู่การแก้ไขปัญหาขนาดใหญ่ที่น่าเกลียดและบั๊กกี้ซึ่งการแทนที่ฟังก์ชั่นที่เรียบง่าย และฉันก็เริ่มตั้งชื่อเหล่านี้จนกระทั่งคำถามยาวเกินไปและฉันตัดสินใจที่จะลบออก ฉันชอบความคิดที่ว่าไม่มีโค้ดเกินความจำเป็นการมองเห็นได้มากกว่าที่จำเป็นและสิ่งที่เป็นนามธรรมมากกว่าที่จำเป็น และสิ่งนี้อาจใช้ได้เมื่อเขียนแอปพลิเคชันสำหรับผู้ใช้ปลายทางโดยที่รหัสจะถูกใช้โดยผู้ที่เขียนเท่านั้น แต่สิ่งนี้จะเกิดขึ้นได้อย่างไรหากผู้พัฒนารายอื่นใช้โค้ดนี้ในกรณีที่เป็นไปไม่ได้ที่ผู้พัฒนาดั้งเดิมจะนึกถึงกรณีการใช้งานที่เป็นไปได้ล่วงหน้าและการเปลี่ยนแปลง / การสร้างซ้ำนั้นยาก / เป็นไปไม่ได้ เนื่องจากไลบรารีโอเพ่นซอร์สขนาดใหญ่ไม่ใช่สิ่งใหม่อะไรคือวิธีที่พบได้บ่อยที่สุดในการจัดการการมองเห็นในโครงการดังกล่าวด้วยภาษาเชิงวัตถุ

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

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

2
ระบบไฟล์“ ดู” อุปกรณ์เก็บข้อมูลเป็นอาร์เรย์ขนาดใหญ่มากหรือไม่?
ฉันต้องการทราบว่าระบบไฟล์เขียนและอ่านจากอุปกรณ์เก็บข้อมูลอย่างไร ฉันคิดว่านี่เป็นวิธีการทำงาน: ระบบไฟล์ไม่สามารถเข้าถึงอุปกรณ์จัดเก็บข้อมูลได้โดยตรง แต่จะแสดงอุปกรณ์เก็บข้อมูล (โดยไดรเวอร์อุปกรณ์ของอุปกรณ์เก็บข้อมูล) ไปยังระบบไฟล์ในรูปแบบอาร์เรย์ไบต์ (มีขนาดใหญ่มาก) ตัวอย่างเช่นหากระบบไฟล์ต้องการเข้าถึงฮาร์ดดิสก์ก็จะเข้าถึงอาร์เรย์ไบต์ที่เป็นตัวแทนของฮาร์ดดิสก์ วิธีนี้ระบบไฟล์สามารถทำงานกับอุปกรณ์เก็บข้อมูลชนิดใดก็ได้ (ฮาร์ดดิสก์แบบดั้งเดิม SSD, USB แฟลชไดรฟ์ ฯลฯ ) และมีการเปลี่ยนแปลงเฉพาะไดรเวอร์อุปกรณ์สำหรับอุปกรณ์เก็บข้อมูล ภาพนี้แสดงสิ่งที่ฉันเพิ่งอธิบาย: ฉันถูกต้องในการทำความเข้าใจของฉัน?

2
วิธีทดสอบและการใช้งาน mutex มาตรฐาน
ตามที่ชื่อบอกไว้: คุณจะทดสอบและเปรียบเทียบการใช้งาน mutexes ใน c ++ อย่างไร? โดยพื้นฐานแล้วฉันเขียน std :: mutex เหมือนคลาสสำหรับโครงการที่รันบน 2 คอร์ armv7 โดยมีจุดประสงค์เพื่อลดค่าใช้จ่ายในกรณีที่ไม่มีการโต้แย้ง ตอนนี้ฉันกำลังพิจารณาใช้ mutex ที่กล่าวไว้ในที่ต่าง ๆ และสถาปัตยกรรมที่แตกต่างกัน แต่ก่อนที่ฉันจะทำสิ่งนี้ มันถูกต้องจริง ไม่มีกรณีพยาธิวิทยาใดที่มันทำงานได้แย่กว่า std มาตรฐาน :: mutex มาก เห็นได้ชัดว่าฉันเขียนการทดสอบหน่วยพื้นฐานและมาตรฐานไมโครและทุกอย่างดูเหมือนจะทำงาน แต่ในรหัสแบบมัลติเธรด "ดูเหมือนจะทำงาน" ไม่ได้ให้ความสะดวกสบายมาก ดังนั้นมีเทคนิคการวิเคราะห์แบบคงที่หรือแบบไดนามิกหรือไม่? ข้อผิดพลาดทั่วไปเมื่อเขียนการทดสอบหน่วยสำหรับคลาส mutex คืออะไร สิ่งที่ขอบกรณีทั่วไปควรระวัง (ประสิทธิภาพฉลาด) คืออะไร? ฉันใช้ไลบรารีมาตรฐานชนิดสำหรับการใช้งานเท่านั้นซึ่งรวมถึงการดำเนินการโหลดและจัดเก็บที่ไม่ต่อเนื่องตามลำดับบน atomics อย่างไรก็ตามฉันสนใจที่จะแนะนำการใช้งานแบบไม่เชื่อเรื่องพระเจ้าเนื่องจากฉันต้องการใช้ชุดทดสอบที่เหมือนกันสำหรับการใช้งานอื่นเช่นกัน
12 c++  testing  mutex 

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