Đó chắc chắn phụ thuộc vào (ít nhất) hai điều:
- Làm thế nào mutex được thực hiện, và
- Làm thế nào các tai nạn chủ đề (nó ném một ngoại lệ, hay nó chỉ là "biến mất") .
Ví dụ: trong các khối synchronized
của Java được đảm bảo được giải phóng khi "chuỗi được thực hiện với đối tượng" - bất kể điều đó có nghĩa là gì (xem link). Theo this bài viết:
Dừng một chuỗi làm cho nó mở khóa tất cả các màn hình đã khóa.
Ok, stop()
ing thread giải phóng màn hình, nhưng nếu chỉ bằng cách nào đó biến mất, thì "được thực hiện với đối tượng"? Tôi không thấy tài liệu này ở bất cứ đâu. Nhưng rõ ràng là một người nào đó phải phát hành các mutex bị khóa hoặc nếu không họ sẽ bế tắc; có lẽ một số mutexes hoặc môi trường bao gồm các cơ chế phát hành mutexes tự động nếu thread, người đã khóa chúng, trở nên không tồn tại.
Ví dụ khác: java.util.concurrent.Lock tài liệu khuyên bạn nên sử dụng câu lệnh finally
để giải phóng khóa sao cho bất kỳ điều gì xảy ra với chuỗi thực thi, khóa sẽ được giải phóng. Tuy nhiên, nếu thread biến mất trước khi câu lệnh finally
được thực thi, thì khóa không bao giờ được giải phóng và bế tắc thực sự xảy ra. Tất nhiên, chủ đề không nên "biến mất" như thế.
Khá là một câu hỏi hay!
Nguồn
2010-07-02 07:41:27
Vui lòng cung cấp thêm thông tin. – InsertNickHere