在一個C++程序中,我有兩個引用計數對象:國王和繼承人。繼承人需要阻止,直到國王被摧毀。 King是一個引用計數的對象,當引用計數變爲零時它將被銷燬。如果繼承人提到國王,那麼國王的參考計數將永遠不會爲零。國王被毀滅之前怎麼能阻擋繼承人?C++對象終止通知
6
A
回答
10
您可以使用非擁有(或「弱」)引用,類似於how weak_ptr
works。至於等到國王死了的時候,你可以使用一個國王可以持有的互斥體,直到他死亡並讓繼承人等待國王釋放它爲止。
如果您需要有多個繼承人等待,並且有一些命令給繼承人,那麼您可以有一個「繼承人選擇器」對象,用於跟蹤繼承人列表及其優先順序,以及國王何時釋放它會將互斥量的所有權分配給列表中的下一個繼承者。
0
謝謝@詹姆斯。這是我最終解決的解決方案:
互斥體方法看起來很有前途,但大多數互斥體都期望獲取線程和釋放線程是相同的。最後,我讓Heir在棧上創建了一個計數爲零的信號量,將一個指向信號量的指針傳遞給King,釋放King,然後嘗試獲取信號量。計數爲零,所以繼承人立即阻止。當King的析構函數被調用時,它會在信號量上調用'釋放'。這似乎與Rogue Wave信號量一致。
相關問題
- 1. Shell腳本終止通知
- 2. 通知對象
- 3. org.json.JSONException:未終止的對象
- 4. Mozilla取消「始終阻止通知」
- 5. Python uTorrent通知腳本不會終止
- 6. 終止jQuery Ajax調用時通知
- 7. 通知家長關於線程終止
- 8. 當地通知應用程序終止
- 9. 後臺進程終止後的通知
- 10. NSTask不發送終止通知
- 11. 應用終止時的遠程通知
- 12. 1.0.2通知對象
- 13. 如何在c#中通知程序執行和終止?
- 14. C# - 終止Application.Run()
- 15. 對象引用異常終止塊
- 16. 如何有效地終止ILaunch對象?
- 17. 終止從一個Runnable()對象主()
- 18. Python的方式終止對象
- 19. 推送通知對象
- 20. 新S3對象的通知
- 21. 通知使用對象
- 22. Java對象通知父類
- 23. 編輯通知對象?
- 24. 特定對象的通知
- 25. 如何通知對象?
- 26. IOS通知「死」的對象
- 27. C++我想知道對象
- 28. 知道一個對象C#
- 29. C++通用對象
- 30. 通用對象C#
Bah ..我們回答了同樣的問題,並且在等待的部分添加了更多一點。刪除我的,並提高你的。只需補充一點,繼承人應該對國王持有弱點。 – 2010-07-27 13:31:12
+1使用互斥體進行通知 – 2010-07-27 13:37:56
weak_ptr不起作用 - 至少不是沒有輪詢。爲了在King上執行一個阻塞方法,你必須去掉weak-ptr。發生這種情況時,您會強烈引用該對象並將其保持在範圍內。 – brianegge 2010-07-27 13:49:29