Select the product you need help with
คำอธิบายของเงื่อนไขแข่งและ deadlocksหมายเลขบทความ (Article ID): 317723 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้ เนื้อหาบนหน้านี้สรุปvisual Basic .NET หรือ Visual Basic 2005 มีความสามารถในการใช้เธรดในโปรแกรมประยุกต์ Visual Basic สำหรับในครั้งแรก เธรดที่แนะนำเกี่ยวกับการตรวจแก้จุดบกพร่องเช่นเงื่อนไขการแข่งและ deadlocks บทความนี้สำรวจปัญหาสองเหล่านี้ ข้อมูลเพิ่มเติมเงื่อนไขการแข่งaแย่งเกิดขึ้นเมื่อเธรดที่สองเข้าถึงตัวแปรที่ใช้ร่วมกันในเวลาเดียวกัน เธรดแรกตัวแปรที่อ่าน และเธรดที่สองอ่านค่าเดียวกันจากตัวแปร แล้ว ทำเธรดแรกและเธรดที่สองของการดำเนินการกับมูลค่า และพวกเขา race เพื่อดูเธรดที่สามารถเขียนค่าล่าสุดให้กับตัวแปรที่ใช้ร่วมกัน ค่าของเธรดที่ค่าของเขียนล่าสุดถูกรักษาไว้ เนื่องจากเธรดกำลังเขียนเหนือค่าว่า เขียนกลุ่มหัวข้อก่อนหน้านี้รายละเอียดและตัวอย่างมีการปันส่วนแต่ละกลุ่มหัวข้อที่มีรอบระยะเวลาที่กำหนดไว้ล่วงหน้าของเวลาในการดำเนินการตัวประมวลผล เมื่อเวลาที่ปันส่วนสำหรับเธรดที่หมดอายุ บริบทของเธรดถูกบันทึกจนกว่าจะเปิดการถัดไปบนตัวประมวลผล และตัวประมวลผลเริ่มต้นใช้งานการดำเนินการของเธรดถัดไปความสามารถทำคำสั่งบรรทัดหนึ่งให้แย่งหรือไม่ ตรวจสอบอย่างต่อไปนี้เพื่อดูวิธีแย่งเกิดขึ้น ไม่มีเธรดที่สอง และทั้งสองจะปรับปรุงตัวแปรที่ใช้ร่วมกันที่เรียกว่ายอดรวม(ซึ่งจะแสดงเป็นdword ptr ds: [031B49DCh]ในแอสเซมบลีรหัส) โค้ด visual Basic: ผลรวมเป็น 100, val1 คือ 50 และ val2 15 เธรด 1 ได้รับโอกาสในการดำเนินการ แต่ขั้นตอนที่ 1 ถึง 3 ที่เสร็จสมบูรณ์แล้วเท่านั้น ซึ่งหมายความ ว่า เธรด 1 อ่านตัวแปร และเพิ่มการให้เสร็จสมบูรณ์ เพียงแค่ในขณะนี้เป็นการรอเธรด 1 การเขียนออกเป็นค่าใหม่ของ 150 หลังจากที่หยุดเธรด 1, 2 ของเธรดได้รับการดำเนินการเสร็จสมบูรณ์ ซึ่งหมายความ ว่า คุณได้เขียนค่าที่ จะคำนวณ (85) ออกไปทั้งหมดที่ตัวแปร และสุดท้าย เธรด 1 regains ควบคุม และทำการดำเนินงานเสร็จสมบูรณ์ เขียนออกมูลค่า (150) ดังนั้น เมื่อจบเธรด 1 ค่าของผลรวมได้ในขณะนี้ 150 แทนการ 85 คุณสามารถดูได้อย่างไรซึ่งอาจเป็นปัญหาที่สำคัญได้ หากนี้โปรแกรมธนาคาร ลูกค้าจะมีเงินในบัญชีของพวกเขาไม่ควรมีอยู่ ข้อผิดพลาดนี้เป็นแบบสุ่ม เนื่องจากเป็นไปได้สำหรับเธรด 1 การดำเนินการของการดำเนินการก่อนหมดเวลา หมดอายุของตัวประมวลผล แล้ว เธรด 2 จะเริ่มต้นการดำเนินการ ถ้าเหตุการณ์เหล่านี้เกิดขึ้น ยังไม่เกิดปัญหา การดำเนินการเธรดคือ nondeterministic ดังนั้น คุณไม่สามารถควบคุมเวลาหรือลำดับของการดำเนินการ นอกจากนี้ โปรดสังเกตว่า เธรดที่อาจเรียกใช้ในการรันไทม์และโหมดการตรวจแก้จุดบกพร่องแตกต่างกัน นอกจากนี้ คุณสามารถดูว่า ถ้าคุณดำเนินการแต่ละกลุ่มหัวข้อในลำดับ ข้อผิดพลาดที่ไม่เกิดขึ้น randomness นี้ทำข้อผิดพลาดเหล่านี้ยากขึ้นมากในการติดตามลง และการตรวจแก้จุดบกพร่อง เพื่อป้องกันไม่ให้เงื่อนไขแข่งเกิดขึ้น คุณสามารถล็อกตัวแปรที่ใช้ร่วมกัน ดังนั้นเธรดเพียงหนึ่งครั้งมีการเข้าถึงตัวแปรที่ใช้ร่วมกัน ทำ sparingly เพราะถ้าตัวแปรถูกล็อกในเธรด 1 และ 2 ของเธรดตัวแปรที่จำเป็นต้องยัง การดำเนินการของเธรด 2 ของหยุดในขณะที่ 2 ของเธรดที่รอสำหรับเธรด 1 การปลดปล่อยตัวแปร (สำหรับข้อมูลเพิ่มเติม โปรดดู "SyncLock" ในส่วน "อ้างอิง" ของบทความนี้) อาการอาการทั่วสภาวะการแย่งคือ ค่า unpredictable ของตัวแปรที่ใช้ร่วมกันระหว่างหลายเธรด ซึ่งผลลัพธ์จากการ unpredictability ของใบสั่งเธรดเรียกใช้ บางชนะเธรดที่หนึ่ง และบางชนะเธรดอื่น ทำงานในบางครั้ง การดำเนินได้อย่างถูกต้อง นอกจากนี้ หากเธรดแต่ละดำเนินแยกต่างหาก ค่าตัวแปรปฏิบัติอย่างถูกต้องdeadlocksadeadlockเกิดขึ้นเมื่อเธรดที่สองแต่ละล็อกตัวแปรที่แตกต่างกันในเวลาเดียวกัน และพยายามล็อกตัวแปรที่เธรดอื่นล็อกไว้แล้ว ด้วยเหตุ เธรดแต่ละหยุดการดำเนินการ และรอสำหรับเธรดอื่นไปยังตัวแปรที่นำออกใช้ เนื่องจากเธรดแต่ละจะเก็บตัวแปรที่เธรดอื่นต้อง ไม่มีสิ่งใดเกิดขึ้น และเธรดยังคง deadlockedรายละเอียดและตัวอย่างรหัสต่อไปนี้มีสองวัตถุ LeftVal และ RightVal:deadlock ไม่เกิดขึ้นตลอดเวลา หากเธรด 1 ดำเนินการล็อกทั้งก่อนที่ตัวประมวลผลหยุด เธรด 1 สามารถดำเนินการของ และการปลดล็อกตัวแปรที่ใช้ร่วมกันแล้ว หลังจากที่ 1 ของเธรด unlocks ตัวแปร 2 เธรดสามารถดำเนินการดำเนินการ ตามที่คาดไว้ ดูข้อผิดพลาดนี้เหมือนเห็นได้ชัดเจนเมื่อ snippets เหล่านี้รหัสถูกวางเคียงข้าง แต่ในการฝึก รหัสอาจปรากฏขึ้นในโมดูลที่แยกต่างหากหรือขอบเขตของรหัสของคุณ นี้มีข้อผิดพลาดที่ยากมากในการติดตามลงเนื่องจาก จากรหัสเดียวกันนี้ การดำเนินการถูกต้องและการดำเนินการไม่ถูกต้องจะเกิดขึ้น อาการอาการที่พบโดยทั่วไปของ deadlock คือ ว่า โปรแกรมหรือกลุ่มของเธรดที่หยุดการตอบสนอง นี่คือเรียกอีกอย่างว่าการแฮง. อย่างน้อยสองเธรดกำลังรอแต่ละตัวแปรที่ถูกล็อกเธรดอื่น เธรดไม่ดำเนิน เนื่องจากเธรดไม่จะปล่อยตัวแปรนั้นจนกว่าจะได้รับข้อความแสดงตัวแปรอื่น โปรแกรมทั้งหมดสามารถวางถ้าโปรแกรมกำลังรอในหนึ่งหรือทั้งเธรดเหล่านั้นเพื่อดำเนินการเสร็จสมบูรณ์สิ่งที่เป็นเธรดหรือไม่กระบวนการที่จะใช้ในการแยกโปรแกรมประยุกต์อื่นที่กำลังดำเนินการในเวลาที่ระบุไว้ในคอมพิวเตอร์เครื่องเดียว ระบบปฏิบัติไม่ดำเนินกระบวนการ แต่เธรดที่ดำเนินการ เธรดคือ หน่วยของการดำเนินการ ระบบปฏิบัติการจัดสรรเวลาที่ใช้โปรเซสเซอร์เธรดสำหรับการดำเนินงานของเธรด กระบวนการเดียวประกอบด้วยหลายเธรดของการดำเนินการ แต่ละเธรดที่ต้องการเก็บรักษาตัวจัดการของตนเองข้อยกเว้น การจัดกำหนดการระดับความสำคัญ และชุดของโครงสร้างที่ระบบปฏิบัติการใช้ในการบันทึกของเธรดบริบทหากเธรดไม่สามารถทำการดำเนินการในช่วงเวลาที่จะถูกกำหนดให้กับตัวประมวลผล บริบทถูกเก็บไว้จนกว่าจะว่า เธรดที่ได้รับเวลาการประมวลผลในครั้งถัดไป บริบทประกอบด้วยข้อมูลทั้งหมดที่เธรดต้องการดำเนินการดำเนินการต่อไปอย่างราบรื่น ข้อมูลนี้รวมถึงของเธรดการตั้งค่าของตัวประมวลผลการลงทะเบียนและกองสายภายในพื้นที่ที่อยู่ของกระบวนการโฮสต์ข้อมูลอ้างอิงสำหรับข้อมูลเพิ่มเติม ค้นหาวิธีใช้ Studio Visual หาคำสำคัญต่อไปนี้:
316422 สำหรับข้อมูลเพิ่มเติม ให้ดู MSDN เว็บไซต์ต่อไปนี้:
(http://support.microsoft.com/kb/316422/EN-US/
)
INFO: Roadmap for Threading in Visual Basic .NETThreads and Threading
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconthreadsthreading.asp)
คุณสมบัติหมายเลขบทความ (Article ID): 317723 - รีวิวครั้งสุดท้าย: 13 มกราคม 2554 - Revision: 4.0 ใช้กับ
แปลโดยคอมพิวเตอร์ ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:317723
(http://support.microsoft.com/kb/317723/en-us/
)
| การแปลบทความ |




กลับไปด้านบน








