Tôi đã đi qua các tài liệu hướng dẫn trong http://www.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html nhưng điều này không được đề cập một cách rõ ràng. Bất kỳ phản ứng nhanh chóng sẽ được đánh giá cao.Biến điều kiện 2 có thể chia sẻ cùng một mutex không?
13
A
Trả lời
17
Có. Điều này đôi khi là một ý tưởng hay nếu bạn có điều kiện riêng biệt mà bạn muốn chờ đợi. Ví dụ, bạn có thể có một hàng đợi và biến điều kiện cho cả hai "không đầy đủ" và "không trống" vv ... Một người nào đó đặt dữ liệu trên hàng chờ đợi "không đầy đủ". Một người nào đó lấy dữ liệu ra khỏi hàng chờ đợi "không trống". Tất cả đều sử dụng cùng một mutex.
21
Có. Đây là tu tập chung:
điển hình ví dụ:
mutex queue_mutex;
cond queue_is_not_full_cond;
cond queue_is_not_empty_cond;
push()
lock(queue_mutex)
while(queue is full)
wait(queue_is_not_full_cond,queue_mutex);
do push...
signal(queue_is_not_empty_cond)
unlock(queue_mutex)
pop()
lock(queue_mutex)
while(queue is empty)
wait(queue_is_not_empty_cond,queue_mutex);
do pop...
signal(queue_is_not_full_cond)
unlock(queue_mutex)
+1
+1 cho mã giả – Fanatic23
Các vấn đề liên quan
- 1. Cách chia sẻ cùng một biến giữa các mô-đun?
- 2. Biến tĩnh có được chia sẻ giữa các luồng không?
- 3. Biến điều kiện trong bộ nhớ dùng chung - đây có phải là mã POSIX-conformant không?
- 4. Có thể có 2 biến trỏ đến cùng một đối tượng không? (javascript)
- 5. Biến toàn cầu trong thư viện/dll được chia sẻ, được chia sẻ qua quá trình
- 6. hiện một mutex được mở khóa khi gọi thông báo trên biến điều kiện
- 7. Ý định chia sẻ Android cho một bitmap - có thể lưu nó trước khi chia sẻ không?
- 8. AS3 Hai MovieClips Chia sẻ cùng một lớp
- 9. Chia sẻ sai và biến nguyên tử
- 10. Tôi có thể đặt lại lớp tĩnh/chia sẻ không?
- 11. Quy trình VS thread: có thể hai quá trình chia sẻ cùng một bộ nhớ chia sẻ? có thể hai chủ đề?
- 12. Ví dụ chia sẻ RSpec không được chia sẻ
- 13. Chia sẻ biến trong phương thức tĩnh
- 14. java.awt.AWTError: BoxLayout không thể được chia sẻ
- 15. Chia sẻ biến giữa các quá trình
- 16. Bạn có thể nghe sự kiện chia sẻ bài đăng trên AddThis không?
- 17. Có ai có thể chia sẻ tệp mẫu .lldbinit không?
- 18. Hibernate Distributed Cache - có thể nhiều ứng dụng chia sẻ cùng một bộ nhớ cache?
- 19. Chia sẻ cùng một biến giữa nhiều chương trình độc lập trong Linux
- 20. Tại sao các biến thành viên không được chia sẻ?
- 21. Windows Sự kiện triển khai trong Linux bằng các biến có điều kiện?
- 22. PHP có cho phép các hàm và thuộc tính lớp chia sẻ cùng một tên không?
- 23. Hai biểu mẫu chia sẻ cùng một đầu vào
- 24. Trình khởi tạo Mục tiêu-C có được phép chia sẻ cùng một tên không?
- 25. Biến điều kiện vẫn cần một mutex nếu bạn thay đổi giá trị được kiểm tra một cách nguyên tử?
- 26. Gson java.text.ParseException: Ngày không thể chia sẻ
- 27. Chia sẻ một biến giữa nhiều chủ đề khác nhau
- 28. Làm cho hai div chia sẻ cùng một thanh cuộn?
- 29. Các thư viện được chia sẻ có sử dụng cùng một vùng với ứng dụng không?
- 30. Tôi có thể chia sẻ cùng một dự án nhật thực trên một kho lưu trữ SVN & GIT cùng một lúc không?
Thanks a lot. Bất kỳ liên kết có liên quan nào? – Fanatic23
Google bật ví dụ này: http://cs.wmich.edu/~jjwillia/10.spring/cs4540/asgn2/pthreads-pro-con – xscott
Nhận xét rất muộn, nhưng việc sử dụng 2 condvars với một mutex thực sự được khuyến nghị thực hành ví dụ trường hợp xếp hàng, xem Lập trình Butenhof với Chủ đề Posix '. –