Trong chương trình C++, tôi có hai đối tượng được tính tham chiếu: King và Heir. Người thừa kế cần phải chặn cho đến khi vua bị phá hủy. Vua là một đối tượng được tính tham chiếu sẽ bị hủy khi số tham chiếu của nó là 0. Nếu người thừa kế giữ một tham chiếu đến vua, thì số lượng tham khảo của King sẽ không bao giờ đi đến số không. Làm thế nào có thể có người thừa kế chặn cho đến khi vua bị phá hủy?Thông báo chấm dứt đối tượng C++
Trả lời
Bạn có thể sử dụng tham chiếu không sở hữu (hoặc "yếu"), tương tự như how weak_ptr
works.
Để chờ đợi cho đến khi nhà vua chết, bạn có thể sử dụng một mutex mà nhà vua có thể giữ cho đến khi ông chết và có khối người thừa kế chờ đợi cho nhà vua để phát hành nó.
Nếu bạn cần có nhiều người thừa kế chờ đợi và có một số yêu cầu cho người thừa kế, bạn có thể có đối tượng "người thừa kế" theo dõi danh sách người thừa kế và thứ tự ưu tiên của họ, và khi nhà vua giải phóng mutex nó sẽ gán quyền sở hữu của mutex đó cho người thừa kế tiếp theo trong danh sách.
Cảm ơn @James. Đây là giải pháp mà tôi đã kết thúc với:
Phương pháp mutex có vẻ đầy hứa hẹn, nhưng hầu hết các mutex đều mong đợi chuỗi tìm kiếm và giải phóng chuỗi giống nhau. Cuối cùng, tôi đã có người thừa kế tạo ra một semaphore với một số không trên stack, vượt qua một con trỏ đến semaphore để King, phát hành King, và sau đó cố gắng để có được semaphore. Số đếm là số không, vì vậy Người thừa kế ngay lập tức chặn. Khi vua phá hoại được gọi là, nó gọi là 'phát hành' trên semaphore. Điều này dường như làm việc tốt với semaphore Rogue Wave.
- 1. Nhận thông báo về chấm dứt quá trình Java
- 2. C# - Chấm dứt Application.Run()
- 3. C + + varadic mẫu chấm dứt lớp
- 4. Quy trình con chấm dứt khi quá trình cha mẹ chấm dứt trong C#
- 5. null chấm dứt chuỗi
- 6. C# ứng dụng chấm dứt bất ngờ
- 7. Cách được thông báo khi một sợi đã bị chấm dứt vì một số lỗi
- 8. Thông báo địa phương về việc chấm dứt đơn đăng ký
- 9. Chương trình Java chấm dứt bất ngờ mà không có bất kỳ thông báo lỗi nào
- 10. Cách hủy thông báo về việc chấm dứt ứng dụng không mong muốn/buộc
- 11. Đợi chấm dứt n goroutines
- 12. Chấm dứt chuỗi - char c = 0 vs char c = '\ 0'
- 13. Chấm dứt Chương trình Python
- 14. Lỗi Iphone Chấm dứt để phản hồi việc chấm dứt SpringBoard
- 15. Chấm dứt yêu cầu ExpressJS
- 16. python multiprocessing pool chấm dứt
- 17. Process.Close() không được chấm dứt quá trình tạo ra, C#
- 18. phát hiện chấm dứt chương trình (C, Windows)
- 19. Chấm dứt chương trình nhấn CTRL + C trong GDB
- 20. Làm cách nào để chấm dứt chuỗi trong C++ 11?
- 21. C++, tăng asio, nhận null chuỗi chấm dứt
- 22. cách chuỗi chấm dứt trong java?
- 23. Xóa tệp được đảm bảo khi chấm dứt chương trình (C/C++)
- 24. Tại sao ống này bị chấm dứt?
- 25. Chức năng Haskell không chấm dứt
- 26. Chấm dứt BAML trong ứng dụng WPF
- 27. phantomjs exit() không chấm dứt quá trình
- 28. std :: chấm dứt undefined trong Cocoa App
- 29. Chấm dứt quá trình chạy với `exec` khi chương trình chấm dứt
- 30. MPMusicPlayerController: iPod dừng gửi thông báo, khi ứng dụng iPod bị chấm dứt ở chế độ nền
Bah .. chúng tôi đã trả lời cùng một điều và bạn đã thêm một chút nữa vào phần chờ đợi. Đã xóa của tôi và upped của bạn. Chỉ cần thêm, người thừa kế nên giữ tham chiếu weak_ptr với nhà vua. –
+1 để sử dụng mutex để thông báo –
weak_ptr sẽ không hoạt động - ít nhất là không cần bỏ phiếu. Để thực hiện một phương thức chặn trên King, bạn phải bỏ tham chiếu đến weak-ptr. Khi điều này xảy ra, bạn sẽ có được một tham chiếu mạnh mẽ đến đối tượng và giữ nó cho đến khi nó nằm trong phạm vi. – brianegge