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

สถานการณ์ที่การดำเนินการสองรายการ (หรือมากกว่า) ต้องการชุดทรัพยากรที่ทับซ้อนกันและไม่สามารถดำเนินการให้เสร็จสิ้นได้เนื่องจากไม่สามารถรับการล็อกทั้งหมดที่จำเป็นในการดำเนินการให้เสร็จสมบูรณ์และปลดล็อกได้


8
วิธีการหลีกเลี่ยงการหยุดชะงักของ mysql 'เมื่อพยายามล็อค; ลองเริ่มธุรกรรมใหม่ '
ฉันมีตาราง innoDB ซึ่งบันทึกผู้ใช้ออนไลน์ มันได้รับการปรับปรุงในทุกหน้ารีเฟรชโดยผู้ใช้เพื่อติดตามว่าพวกเขาอยู่ในหน้าและวันที่เข้าถึงล่าสุดไปยังเว็บไซต์ ฉันมี cron ที่ทำงานทุก ๆ 15 นาทีเพื่อลบระเบียนเก่า ฉันพบ 'Deadlock เมื่อพยายามล็อค; ลองรีสตาร์ทธุรกรรม 'เป็นเวลาประมาณ 5 นาทีเมื่อคืนและดูเหมือนว่าจะเป็นเมื่อเรียกใช้ INSERT ในตารางนี้ มีคนแนะนำวิธีหลีกเลี่ยงข้อผิดพลาดนี้ได้ไหม === แก้ไข === นี่คือแบบสอบถามที่กำลังทำงานอยู่: เข้าชมไซต์ครั้งแรก: INSERT INTO onlineusers SET ip = 123.456.789.123, datetime = now(), userid = 321, page = '/thispage', area = 'thisarea', type = 3 ในการรีเฟรชแต่ละหน้า: UPDATE onlineusers …
286 mysql  deadlock 

3
รอคอย vs Task.Wait - Deadlock?
ฉันไม่เข้าใจความแตกต่างระหว่างและTask.Waitawait ฉันมีบางอย่างที่คล้ายกับฟังก์ชั่นต่อไปนี้ในบริการ ASP.NET WebAPI: public class TestController : ApiController { public static async Task<string> Foo() { await Task.Delay(1).ConfigureAwait(false); return ""; } public async static Task<string> Bar() { return await Foo(); } public async static Task<string> Ros() { return await Bar(); } // GET api/test public IEnumerable<string> Get() { Task.WaitAll(Enumerable.Range(0, 10).Select(x …

7
Recursive Lock (Mutex) กับ Non-Recursive Lock (Mutex)
POSIX อนุญาตให้ mutexes วนซ้ำ นั่นหมายความว่าเธรดเดียวกันสามารถล็อค mutex เดียวกันสองครั้งและจะไม่หยุดชะงัก แน่นอนว่ามันต้องปลดล็อคสองครั้งมิฉะนั้นจะไม่มีเธรดอื่นที่สามารถรับ mutex ได้ ไม่ได้ทุกระบบสนับสนุน pthreads ยังสนับสนุน mutexes recursive แต่ถ้าพวกเขาต้องการที่จะPOSIX สอดคล้องพวกเขาจะต้อง API อื่น ๆ (API ระดับสูงกว่า) มักจะเสนอ mutexes ซึ่งมักเรียกว่าล็อค ระบบ / ภาษาบางระบบ (เช่น Cocoa Objective-C) เสนอทั้ง mutex แบบเรียกซ้ำและไม่เรียกซ้ำ บางภาษาเสนอเพียงหนึ่งภาษาเท่านั้น เช่นใน Java mutexes จะเรียกซ้ำ (เธรดเดียวกันอาจสองครั้ง "ซิงโครไนซ์" บนวัตถุเดียวกัน) ขึ้นอยู่กับฟังก์ชันเธรดอื่น ๆ ที่พวกเขาเสนอการไม่มี mutexes แบบเรียกซ้ำอาจไม่มีปัญหาเนื่องจากพวกเขาสามารถเขียนได้อย่างง่ายดายด้วยตัวคุณเอง สิ่งที่ฉันไม่เข้าใจจริง ๆ : …

17
การหยุดชะงักคืออะไร
เมื่อเขียนแอพพลิเคชั่นแบบมัลติเธรดหนึ่งในปัญหาที่พบบ่อยที่สุดคือการหยุดชะงัก คำถามของฉันต่อชุมชนคือ: การหยุดชะงักคืออะไร คุณตรวจจับพวกมันได้อย่างไร คุณจัดการกับพวกเขา? และในที่สุดคุณจะป้องกันไม่ให้เกิดขึ้นได้อย่างไร

5
'รอ' ทำงาน แต่เรียกงานผลลัพธ์ค้าง / หยุดชะงัก
ฉันมีการทดสอบสี่ครั้งต่อไปนี้และการทดสอบครั้งสุดท้ายแฮงค์เมื่อฉันเรียกใช้ ทำไมสิ่งนี้จึงเกิดขึ้น: [Test] public void CheckOnceResultTest() { Assert.IsTrue(CheckStatus().Result); } [Test] public async void CheckOnceAwaitTest() { Assert.IsTrue(await CheckStatus()); } [Test] public async void CheckStatusTwiceAwaitTest() { Assert.IsTrue(await CheckStatus()); Assert.IsTrue(await CheckStatus()); } [Test] public async void CheckStatusTwiceResultTest() { Assert.IsTrue(CheckStatus().Result); // This hangs Assert.IsTrue(await CheckStatus()); } private async Task<bool> CheckStatus() { var restClient = …
126 c#  nunit  task  deadlock  async-await 


4
สาเหตุของกระบวนการที่ตกเป็นเหยื่อการหยุดชะงัก
ฉันมีกระบวนการกับ Select ซึ่งใช้เวลานานในการดำเนินการตามลำดับ 5 ถึง 10 นาที ขณะนี้ฉันไม่ได้ใช้ NOLOCK เป็นคำแนะนำสำหรับเอ็นจินฐานข้อมูล MS SQL ในเวลาเดียวกันเรามีกระบวนการอื่นในการอัปเดตและแทรกลงในฐานข้อมูลเดียวกันและตารางเดียวกัน กระบวนการแรกได้เริ่มต้นเมื่อเร็ว ๆ นี้เพื่อสิ้นสุดก่อนเวลาอันควรด้วยข้อความ SQLEXCEPTION: ธุรกรรมหยุดชะงักในทรัพยากรที่ถูกล็อกด้วยกระบวนการอื่นและได้รับเลือกให้เป็นเหยื่อการชะงักงัน กระบวนการแรกนี้กำลังทำงานในไซต์อื่น ๆ ในเงื่อนไขที่เหมือนกัน แต่มีฐานข้อมูลที่เล็กกว่าดังนั้นคำสั่ง select ที่เป็นปัญหาจึงใช้เวลาสั้นกว่ามาก (ตามลำดับ 30 วินาทีหรือมากกว่านั้น) ในไซต์อื่น ๆ เหล่านี้ฉันไม่ได้รับข้อความหยุดชะงักในไซต์อื่น ๆ เหล่านี้ ฉันยังไม่ได้รับข้อความนี้ในไซต์ที่มีปัญหาในตอนแรก แต่ฉันคิดว่าเนื่องจากฐานข้อมูลเติบโตขึ้นฉันเชื่อว่าฉันต้องข้ามเกณฑ์บางอย่าง นี่คือคำถามของฉัน: เวลาที่ใช้ในการดำเนินการธุรกรรมอาจทำให้กระบวนการที่เกี่ยวข้องมีแนวโน้มที่จะถูกตั้งค่าสถานะเป็นเหยื่อการชะงักงัน หากฉันดำเนินการเลือกด้วยคำใบ้ NOLOCK สิ่งนี้จะลบปัญหาหรือไม่ ฉันสงสัยว่าฟิลด์วันที่และเวลาที่ถูกตรวจสอบเป็นส่วนหนึ่งของคำสั่ง WHERE ในคำสั่ง select ทำให้เวลาในการค้นหาช้า ฉันสามารถสร้างดัชนีตามฟิลด์นี้ได้หรือไม่ จะแนะนำหรือไม่?

5
ตัวอย่าง async / await ที่ทำให้เกิดการชะงักงัน
ฉันพบแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียนโปรแกรมแบบอะซิงโครนัสโดยใช้ c # async/ awaitคำหลัก (ฉันเพิ่งเริ่มใช้ c # 5.0) หนึ่งในคำแนะนำที่ได้รับมีดังต่อไปนี้: ความเสถียร: รู้บริบทการซิงโครไนซ์ของคุณ ... บริบทการซิงโครไนซ์บางส่วนไม่ได้ reentrant และ single-threaded ซึ่งหมายความว่าสามารถทำงานได้เพียงหน่วยเดียวในบริบทในช่วงเวลาที่กำหนด ตัวอย่างนี้คือเธรด UI ของ Windows หรือบริบทการร้องขอ ASP.NET ในบริบทการซิงโครไนซ์แบบเธรดเดี่ยวเหล่านี้คุณสามารถหยุดชะงักได้โดยง่าย หากคุณวางภารกิจจากบริบทเธรดเดียวให้รองานนั้นในบริบทรหัสรอของคุณอาจบล็อกงานเบื้องหลัง public ActionResult ActionAsync() { // DEADLOCK: this blocks on the async task var data = GetDataAsync().Result; return View(data); } private async Task<string> GetDataAsync() { …

3
จะจับ SqlException ที่เกิดจากการหยุดชะงักได้อย่างไร?
จากแอป. NET 3.5 / C # ฉันต้องการตรวจจับSqlExceptionแต่ถ้าเกิดจากการหยุดชะงักในอินสแตนซ์ SQL Server 2008 ข้อความแสดงข้อผิดพลาดทั่วไปคือ Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. แต่ดูเหมือนว่าจะไม่ใช่รหัสข้อผิดพลาดในเอกสารสำหรับข้อยกเว้นนี้ การกรองข้อยกเว้นไม่ให้มีคีย์เวิร์ดdeadlockในข้อความดูเหมือนเป็นวิธีที่น่าเกลียดมากในการบรรลุพฤติกรรมนี้ มีใครรู้วิธีที่ถูกต้องในการทำเช่นนี้หรือไม่?

6
C ++ ยุติการเรียกโดยไม่มีข้อยกเว้นที่ใช้งานอยู่
ฉันได้รับข้อผิดพลาด C ++ กับเธรด: terminate called without an active exception Aborted นี่คือรหัส: #include <queue> #include <thread> #include <mutex> #include <condition_variable> template<typename TYPE> class blocking_stream { public: blocking_stream(size_t max_buffer_size_) : max_buffer_size(max_buffer_size_) { } //PUSH data into the buffer blocking_stream &operator<<(TYPE &other) { std::unique_lock<std::mutex> mtx_lock(mtx); while(buffer.size()>=max_buffer_size) stop_if_full.wait(mtx_lock); buffer.push(std::move(other)); mtx_lock.unlock(); stop_if_empty.notify_one(); return *this; …

28
ตัวอย่างการหยุดชะงักอย่างง่าย
ฉันอยากจะอธิบายการหยุดชะงักของเธรดให้กับมือใหม่ ฉันเคยเห็นตัวอย่างการหยุดชะงักมากมายในอดีตบางคนใช้รหัสและบางส่วนใช้ภาพประกอบ (เช่นรถ 4 คันที่มีชื่อเสียง) นอกจากนี้ยังมีปัญหาคลาสสิกที่หยุดชะงักได้ง่ายเช่นThe Dining Philosophersแต่สิ่งเหล่านี้อาจซับซ้อนเกินกว่าที่มือใหม่จริงๆจะเข้าใจได้อย่างเต็มที่ ฉันกำลังมองหาตัวอย่างโค้ดที่ง่ายที่สุดเพื่อแสดงให้เห็นว่าการหยุดชะงักคืออะไร ตัวอย่างควร: เกี่ยวข้องกับสถานการณ์การเขียนโปรแกรม "จริง" ที่สมเหตุสมผล สั้นมากเรียบง่ายและตรงไปตรงมา คุณแนะนำเมนูใด?

13
เขียนโปรแกรมที่จะเข้าสู่ภาวะชะงักงัน [ปิด] อย่างแน่นอน
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันเพิ่งได้รับคำถามนี้ในการสัมภาษณ์ ฉันตอบว่าการหยุดชะงักเกิดขึ้นหากการสอดประสานผิดพลาด แต่ผู้สัมภาษณ์ยืนยันว่าโปรแกรมที่จะเข้าสู่ภาวะชะงักงันโดยไม่คำนึงถึงการแทรกสอดสามารถเขียนได้ เราเขียนโปรแกรมดังกล่าวได้หรือไม่? ช่วยชี้ตัวอย่างโปรแกรมแบบนั้นให้หน่อยได้ไหม

3
ทำไมสตรีมแบบขนานกับแลมบ์ดาในตัวเริ่มต้นแบบคงที่ทำให้เกิดการชะงักงัน
ฉันเจอสถานการณ์แปลก ๆ ที่การใช้สตรีมคู่ขนานกับแลมบ์ดาในตัวเริ่มต้นแบบคงที่ดูเหมือนตลอดไปโดยไม่มีการใช้งาน CPU นี่คือรหัส: class Deadlock { static { IntStream.range(0, 10000).parallel().map(i -> i).count(); System.out.println("done"); } public static void main(final String[] args) {} } นี่ดูเหมือนจะเป็นกรณีทดสอบขั้นต่ำสำหรับการจำลองพฤติกรรมนี้ ถ้าฉัน: วางบล็อกในวิธีการหลักแทนที่จะเป็นตัวเริ่มต้นแบบคงที่ ลบการขนานหรือ ถอดแลมด้า รหัสจะเสร็จสมบูรณ์ทันที ใครสามารถอธิบายพฤติกรรมนี้? มันเป็นจุดบกพร่องหรือตั้งใจ? ฉันใช้ OpenJDK เวอร์ชัน 1.8.0_66-internal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.