Dành cho những ai đang muốn tìm hiểu và khám phá về deadlock. Bắt đầu ngay thôi nào !
Tóm Tắt
1. DeadLock là gì?
Deadlock is a situation where a set of processes are blocked because each process is holding a resource and waiting for another resource acquired by some other process.
Deadlock là tình trạng các process block lẫn nhau do process này thì chờ tài nguyên kia, tài nguyên kia thì đang được một process khác nữa giữ lấy
Dead – Chết, nghe thôi đã thấy lạnh. Lock – Khóa, khóa lại trong nhau mà chết là từ chính xác dùng để diễn tả về Dead Lock
Bạn đang đọc: Deadlock in Java – something you should know 1 – KieBlog
Vòng lặp không lối thoát – Nguồn ảnh / Source: geeksforgeeks.org
2. Xảy ra lúc nào?
Tuy vậy, có phải khi nào cũng xảy ra deadlock hay không ?. Câu vấn đáp là không. Ở 1 số ít trường hợp liệt kê dưới đây sẽ xảy ra :
- Mutual exclusion – Loại trừ nhau
- Lock & wait – Chờ rồi tèo
- No preemption – Không ưu tiên
- Circular wait – Chờ nhau theo vòng tròn
2.1 Mutual Exclusion
Loại trừ lẫn nhau đúng mực là khi hai hay nhiều thread cần sử dụng chung một resource. Nhiều connection đòi thực thi trên một table là ví dụ nổi bật .
Một connection đều nhu yếu được ghi record mới vào table, nhưng table thì đang được lock bởi thread khác. Deadlock coming
2.2 Lock and wait
Khóa và chờ cũng gần giống như loại trừ lẫn nhau. Trường hợp này là một thread cứ chày cối dữ lấy tài nguyên (resource) không buông. Các thread khác thì cứ chờ.
Chờ hoài không thấy, chờ người nơi ấy. Dẫn tới chờ rồi chết cả đám
2.3 No preemption
Không có quyền ưu tiên. Trường hợp này được hiểu là resource A đang rất cần resource, nhưng nó không có quyền lấy resource từ thằng B đang giữ nó. Hai thằng giành nhau cũng xảy ra DeadLock
2.4 Circular Wait
Circular Wait là chờ vòng tròn, lặp trong vô vọng. Thằng T1 thì cần tài nguyên R2, T2 thì cần tài nguyên R3, T3 thì cần tài nguyên R1 của T1 .
Nhức cả cái đầu nhưng xoay mòng mòng thành một cái vòng chờ nhau không lối thoát
Circular Wait, đợi nhau trong vòng tròn vô tận. Nguồn ảnh/ Source: The Robert C. Martin Clean Code Collection
3. Tổng kết
Deadlock là nỗi sợ to lớn với dân lập trình multi thread, concurency. Mỗi khi nó coming, giống như cái tên của nó, chỉ có chết. Nhưng biết thì sẽ luôn có cách để phòng tránh .
Ở phần hai của series bài viết về deadlock sẽ là cách phòng tránh so với từng loại. Đón đọc nha ! .
4. Tham khảo
Wish you have best of luck. Have a good day!. Happy coding!
Source: https://final-blade.com
Category : Kiến thức Internet