คำถามติดแท็ก concurrency

2
ค้นหา Deadlock
ค้นหา Deadlock เมื่อโปรแกรมมิงแบบมัลติเธรดต้องใช้ความระมัดระวังเพื่อหลีกเลี่ยงการล็อคเธรดต่าง ๆ เมื่อเข้าถึงทรัพยากรที่ใช้ร่วมกัน การหยุดชะงักเกิดขึ้นเมื่อเธรดพยายามเข้าถึงทรัพยากรที่ถูกล็อคในเธรดอื่นในเวลาเดียวกันกับที่เธรดอื่นกำลังพยายามเข้าถึงทรัพยากรที่ถูกล็อคโดยเธรดแรก นี่เป็นกรณีที่ง่าย แต่อาจมีความซับซ้อนมากขึ้นด้วยโซ่ทรัพยากรที่ยาวขึ้น ความท้าทาย คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่สามารถตรวจจับสถานการณ์การหยุดชะงักที่เป็นไปได้ในรายการทรัพยากรที่เข้าถึงได้โดยแต่ละเธรด นี่คือ code-golf ดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ ทุกเธรดเริ่มต้นในเวลาเดียวกัน แต่หลังจากนั้นเธรดสามารถทำงานร่วมกันได้ หากมี 2 หัวข้อ 4 การกระทำของแต่ละคนก็อาจจะทำงานเป็น (ที่แต่ละหมายเลขเป็นการกระทำที่เกิดจากด้ายกับว่า ID) 1,1,1,1,2,2,2,2, 2,2,2,2,1,1,1,1, 1,2,1,2,1,2,1,2, 1,1,2,2,2,2,1,1หรือใด ๆ รวมกันเป็นไปได้อื่น ๆ อินพุต คุณจะได้รับรายการของสตริงผ่านทาง STDIN พารามิเตอร์ฟังก์ชันหรือทางเลือกที่ใกล้เคียงที่สุด +a -bแต่ละสายจะอยู่ในรูปแบบ ทุกสตริงนี้แสดงถึงการล็อค ( +) / ปลดล็อค ( -) ของทรัพยากรโดยเธรด ระหว่างทุกเธรดจะเป็น---ตัวคั่น มีการรับประกันว่าเธรดจะไม่พยายามล็อกทรัพยากรที่ถูกล็อกไปแล้วและเธรดทั้งหมดจะปลดล็อกรีซอร์สทั้งหมดที่ล็อกไว้อย่างชัดเจนก่อนออก ต่อไปนี้เป็นตัวอย่างที่แสดงให้เห็น: +a # Lock resource …

18
รหัสย่อที่สร้าง Deadlock
เขียนรหัสที่สั้นที่สุดเพื่อสร้างการหยุดชะงัก การเรียกใช้โค้ดต้องหยุดชั่วคราวดังนั้นจึงไม่ทำงาน public class DeadlockFail extends Thread{ //Java code public static void main(String[]a){ Thread t = new DeadlockFail(); t.start(); t.join(); } //this part is an infinite loop; continues running the loop. public void run(){while(true){}} } มันไม่จำเป็นที่จะต้องแน่ใจว่ารหัสที่จะเข้าสู่การหยุดชะงักเพียงเกือบแน่นอน (ถ้าคุณใช้เวลาอนันต์ก็จะหยุดชะงัก)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.