2015-11-02 18 views

Trả lời

6

spin_lock* chức năng làm tương tự như raw_spin_lock* những cộng, khi gỡ lỗi khóa được kích hoạt (CONFIG_DEBUG_LOCK_ALLOC), thực hiện một số kiểm tra bổ sung khi chạy cho các hoạt động khóa, chẳng hạn như kiểm tra cho bế tắc. Các kiểm tra này được thực hiện bởi hệ thống con lockdep.

Theo quy tắc, các chức năng spin_lock* nên được sử dụng bất cứ khi nào có thể.

Chỉ trong trường hợp hiếm hoi của chính sách khóa rất phức tạp, khi lockdep có thể tạo cảnh báo sai, có thể sử dụng các chức năng raw_spin_lock*.

Ngoài ra, các chức năng raw_* có thể được ưu tiên cho các chức năng phổ biến để giảm mức sử dụng bộ nhớ hoặc các lý do về hiệu suất. Nhưng nó phải là thời gian/không gian thực tế số đo, phản ánh các chiến thắng quan trọng từ việc sử dụng các tối ưu hóa này.

+0

khi khóa có thể tạo cảnh báo sai? và spin_lock bình thường trong có thể ngủ trong khi raw_spin_lock không, có đúng không? –

3

Sự khác biệt chính là spin_lock biến thể ánh xạ thành raw_spin_lock biến thể cho phi RT trong khi nếu CONFIG_PREEMPT_RT được đặt, thì chúng ánh xạ tới rt_spin_lock có thể ngủ.

Bằng cách tách spin_lock khỏi các biến thể ngủ và không ngủ tùy thuộc vào việc chúng tôi có RT hay không, API spin_lock có thể được giữ nhất quán trên mã hạt nhân.

Các vấn đề liên quan