Làm thế nào để các quy trình không liên quan hợp tác bằng cách sử dụng một futex?Chia sẻ tương lai giữa các quy trình không liên quan
Giả sử tôi có các quy trình không liên quan, một là, một quy trình con apache với mô-đun của tôi, một quy trình khác, ví dụ: một kịch bản nền.
Tôi muốn thiết lập một biến điều kiện với một mutex giữa hai sử dụng một futex, để hưởng lợi cho đường dẫn mã nhanh không gian người dùng.
Dường như với tôi rằng bộ nhớ mà tại đó mutex được lưu trữ có thể nằm trong tệp mmap
'd, nếu bộ nhớ đó được ánh xạ, ví dụ: mlock
'd hai quy trình về mặt lý thuyết có thể ban hành các cuộc gọi futex chống lại cùng một địa chỉ.
Hoặc, có lẽ một futex có thể được chuyển từ quy trình này sang quy trình khác bằng cách sử dụng FUTEX_FD
.
Việc gửi mã, ngôn ngữ cấp thấp, cấp cao và động được chấp nhận (C, C++, Python, v.v.). API "mạnh mẽ futex" cũng phải được hỗ trợ.
Tài liệu tham khảo:
- https://www.kernel.org/doc/Documentation/robust-futexes.txt
- http://locklessinc.com/articles/mutex_cv_futex/
P.S. Nếu điều này không thể được thực hiện, vui lòng giải thích chi tiết tại sao. –
[manpage nói] (http://man7.org/linux/man-pages/man7/pthreads.7.html) rằng pthreads sử dụng futexes trong nội bộ. Bạn có xem xét đơn giản sử dụng API cấp cao (như [manpage futex khuyến cáo] (http://man7.org/linux/man-pages/man7/futex.7.html)) và sử dụng điều kiện pthread với ' PTHREAD_PROCESS_SHARED'? – Phillip
bạn đã kiểm tra http://locklessinc.com/articles/mutex_cv_futex/ – Ghayel