2010-07-27 39 views
6

Trong chương trình C++, tôi có hai đối tượng được tính tham chiếu: KingHeir. 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

10

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.

+0

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. –

+0

+1 để sử dụng mutex để thông báo –

+0

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

0

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.

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