2012-04-02 50 views
24

Tôi đã được truy tìm một quá trình với strace và đã thấy mục như: mụcSự khác nhau giữa FUTEX_WAIT và FUTEX_WAIT_PRIVATE là gì?

futex(0x7ffff79b3e00, FUTEX_WAKE_PRIVATE, 1) = 1                 
futex(0x7ffff79b3e00, FUTEX_WAIT_PRIVATE, 2, NULL) = 0 

Tuy nhiên, khi tôi nhìn vào man page for futex Tôi đã chỉ nhìn thấy như FUTEX_WAITFUTEX_WAKE. Vì vậy, câu hỏi của tôi là những gì hiện _PRIVATE được gắn vào cuối của những tên này trong đầu ra strace của tôi có nghĩa là gì? Ví dụ là có bất kỳ sự khác biệt giữa một cái gì đó như FUTEX_WAKE đó là tài liệu trong trang người đàn ông futex và FUTEX_WAKE_PRIVATE mà tôi thấy trong đầu ra strace hoặc tôi có thể giả định rằng họ là như nhau khi tôi đang cố gắng để hiểu những gì đang xảy ra với chương trình tôi gỡ lỗi.

+1

Có thể liên kết với [this?] (http://lwn.net/Articles/229668/) không –

Trả lời

29

Đây là một tối ưu hóa được thực hiện bởi linux/glibc để làm cho futexes nhanh hơn khi chúng không được chia sẻ giữa các quá trình. Glibc sẽ sử dụng _PRIVATE phiên bản của mỗi cuộc gọi futex trừ khi thuộc tính PTHREAD_PROCESS_SHARED được thiết lập trên mutex bạn

Nó giải thích chi tiết hơn ở đây: http://lwn.net/Articles/229668/

Theo mục đích của gỡ lỗi của bạn, bạn chỉ có thể bỏ qua các _PRIVATE hậu tố

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