2 Answers
Anh ơi, khi 1 ứng dụng có 2 thread Update 2 bảng A đến B và B đến A với cùng 1 record sẽ xảy ra deadlock, điều này không tránh khỏi
Anh chưa hiểu cái này lắm, em có thể ví dụ cụ thể bằng code được không?
Trong mọi trường hợp thì việc deadlock đều dẫn đến service bị hoạt động không bình thường. Khi em sử dụng database thì tuỳ theo cơ chế của database đó nó sẽ đối xử với transaction thế nào. Có thể là nó sẽ có timeout cho transaction, có thể là nó sẽ đóng lại transaction khi session bị ngắt kết nối, vậy nên sẽ không nhất thiết em phải restart database đâu.
Để tránh deadlock thì em có thể tham khảo wiki này. Và cách đơn giản nhất là đừng có sử dụng synchronized hoặc lock bừa bãi, và trong code thực tế thì em cũng hiếm khi sử dụng đến lock, ngay cả khi có sử dụng lock thì thường em cũng dùng trong phạm vi nhỏ hoặc không lồng nhau, nên cũng không cần lo lắng quá về deadlock đâu em ạ.
-
0
Hoặc một cách khác là lock row-level thay vì table-level, và cấp độ lock là READ COMMITED, nhưng cách này ko loại bỏ hoàn toàn rủi ro xảy ra cycle deadlock được
-
0