In einem C++ - Programm habe ich zwei Referenzobjekte gezählt: King und Heir. Erbe muss blockieren, bis König zerstört wird. King ist ein Referenz-Zählobjekt, das zerstört wird, wenn der Referenzzähler auf Null geht. Wenn der Erbe einen Bezug zu König hat, wird der Referenzzähler von König niemals auf Null gehen. Wie kann Heir blockieren, bis König zerstört ist?C++ Objekt Kündigung Benachrichtigung
Antwort
Sie können eine nicht besitzende (oder "schwache") Referenz verwenden, ähnlich wie how weak_ptr
works.
Um zu warten, bis der König tot ist, können Sie einen Mutex verwenden, den der König halten kann, bis er stirbt und den Erbblock darauf wartet, dass der König ihn freigibt.
Wenn Sie mehrere Erben warten müssen und einige Erben bestellen, können Sie ein "Erben - Selektor" -Objekt haben, das die Liste der Erben und ihre Rangfolge verfolgt, und wenn der König die Mutex wird dem nächsten Erben in der Liste den Besitz dieses Mutex zuweisen.
Dank @James. Hier ist die Lösung, mit der ich endete:
Die Mutex-Methode schien vielversprechend, aber die meisten Mutexe erwarten, dass der Acquiring-Thread und der Release-Thread identisch sind. Am Ende hatte ich Heir einen Semaphor mit einer Zählung von Null auf dem Stapel erstellen lassen, einen Zeiger auf den Semaphor an König übergeben, King loslassen und dann versuchen, den Semaphor zu erhalten. Die Zählung ist Null, also blockiert Heir sofort. Wenn der Destruktor des Königs aufgerufen wird, ruft er die Freigabe auf dem Semaphor auf. Dies scheint mit dem Rogue Wave Semaphor in Ordnung zu sein.
- 1. Get Data Payload von Android-Benachrichtigung bei Kündigung
- 2. popBackStack mit der Kündigung onCreate
- 3. Nodejs - Versprechen, unbehandelt Kündigung und Speicherleck
- 4. Auto Kündigung des Abonnements in Zuora
- 5. Thread-Kündigung mit http Get-Anfrage beenden
- 6. Vue.js automatische Kündigung von Vuex Store
- 7. Laravel Kassierer 6 Abonnement nach Kündigung erneuern
- 8. Kakao Benutzerdefinierte Benachrichtigung Beispiel
- 9. C# - Daten inside Objekt Objekt
- 10. Kubernetes Load Balancer SSL Kündigung in Google Container-Engine?
- 11. Neue Zeile in C# -Benachrichtigung (Compact Framework)
- 12. C# android GCM Benachrichtigung deaktivieren Ton
- 13. Wie überprüfe ich Texteingabe Toast Benachrichtigung C#
- 14. SQL Query Benachrichtigung von C++ ADO
- 15. IOS Push-Benachrichtigung mit Pushsharp in C#
- 16. Von einer Webkit-Benachrichtigung zurück zum übergeordneten Objekt kommunizieren
- 17. Benachrichtigung erhalten, wenn ein Listenfeld ein Objekt entfernt hat?
- 18. Wie JSON-Objekt mit Android Push-Benachrichtigung in NodeJs senden
- 19. C++/C Objekt-> isOnStack()
- 20. Benachrichtigung von AudioTrack Stream
- 21. Uncaught Reference: Benachrichtigung nicht
- 22. Senden Sie Vorlage Push-Benachrichtigung mit azurblauen Benachrichtigung hub
- 23. reagieren-Native-Onesignal erhalten Push-Benachrichtigung ohne Öffnen der Benachrichtigung
- 24. Umwandlung von JSON-Objekt in C# Objekt
- 25. Deserialisieren von JSON-Objekt zu C# -Objekt
- 26. C# -Objekt in Json-Objekt konvertieren
- 27. konvertieren dynamisches Objekt in C# -Objekt
- 28. ein Objekt in C++
- 29. C# Objekt Binäre Serialisierung
- 30. neues Objekt in C++
Bah .. wir antworteten die gleiche Sache und Sie fügten ein wenig mehr auf den wartenden Teil hinzu. Gelöscht meins und hochgehoben. Nur um hinzuzufügen, sollte der Erbe die schwache_ptr-Referenz auf den König halten. –
+1 für die Verwendung eines Mutex für die Benachrichtigung –
Der weak_ptr wird nicht funktionieren - zumindest nicht ohne Polling. Um eine Blockierungsmethode für King auszuführen, müssen Sie die Schwachstelle zurücksetzen. In diesem Fall erhalten Sie einen starken Verweis auf das Objekt und halten es so lange, bis es sich im Bereich befindet. – brianegge