Ich sehe ein Problem, bei dem ein Aufruf von boost-thread- & gt; in einem Destruktor zu einem Deadlock führt. Ich verstehe nicht warum, und ich bin nicht so scharf darauf, Code zu behalten, der einfach funktioniert (und ich verstehe nicht, warum).
Klassendeklaration (Ich habe die run () - Methode von try / catch aus Platzgründen entfernt: Laut der Boost-Thread-Dokumentation sollte das Ergebnis dasselbe mit oder ohne sein):
%Vor%Snippet, das nicht funktioniert:
%Vor%Snippet was funktioniert:
%Vor%Ich denke, der Grund für dieses Verhalten hat etwas mit diesem Snippet der Boost-Dokumentation zu tun:
muss der Benutzer von Boost.Thread sicherstellen dass das angesprochene Objekt überlebt der neu erstellte Thread der Ausführung.
Aber ich verstehe nicht wirklich, warum der Deadlock - das Hinzufügen des Threads den Destruktor nicht auf B aufruft und das Objekt selbst nicht gelöscht wird, wenn die run () -Methode beendet werden soll.
Ich habe das Problem gefunden: Es läuft auf einen übereifrigen Programmierer hinaus.
Ich hatte mein Projekt ursprünglich mit DUMA ( Ссылка ) kompiliert, um zu sehen, ob meine Implementierung des aktuellen Moduls leckfrei war . Leider hatte meine Test-Sandbox auch die Duma-Einstellungen, die ich erst bemerkte, als ich den Code in einem Debugger durchging.
Nach dem Entfernen aller Speicherleck-Erkennung funktioniert alles wie erwartet.
Tags und Links c++ multithreading boost deadlock