thể trùng lặp:
Why can't you sleep while holding spinlock?Tại sao "ngủ" không được phép khi cầm một ổ khóa?
Theo như tôi biết, spinlocks nên được sử dụng trong thời gian ngắn, và chỉ lựa chọn trong mã như xử lý ngắt nơi ngủ (quyền ưu tiên) là không cho phép.
Tuy nhiên, tôi không biết tại sao có "quy tắc" như vậy mà KHÔNG NÊN ngủ hoàn toàn trong khi cầm một ổ khóa. Tôi biết rằng nó không phải là một thực hành được đề nghị (vì nó là bất lợi trong hoạt động), nhưng tôi thấy không có lý do tại sao giấc ngủ KHÔNG được phép trong spinlocks.
Bạn không thể giữ khóa quay trong khi bạn có được semaphore, vì bạn có thể phải ngủ trong khi chờ semaphore, và bạn không thể ngủ trong khi giữ khóa quay (từ "Linux Kernel Development" của Robert Love) .
Lý do duy nhất tôi có thể thấy là vì lý do di chuyển, bởi vì trong bộ xử lý, spinlocks được thực hiện như vô hiệu hóa ngắt và tắt ngắt, ngủ sẽ không được phép (nhưng ngủ sẽ không phá vỡ mã trong hệ thống SMP) .
Nhưng tôi tự hỏi nếu lý do của tôi là chính xác hoặc nếu có bất kỳ lý do nào khác.
Quy tắc này bạn nói đến là gì? –
Tôi chỉ cần thêm một trích dẫn khối từ một cuốn sách mà qustion của tôi phát sinh. – SHH
Điều đó trông giống như một cái gì đó đặc trưng cho sự phát triển hạt nhân Linux. Nếu bạn đang nói về phát triển hạt nhân Linux thì vui lòng gắn thẻ câu hỏi cho phù hợp. –