Brechen von Änderungen in Boost.Thread 3.0.0

8

In den Versionshinweisen der Version 1.50.0 der Boost-Bibliotheken habe ich zwei wichtige Änderungen festgestellt ( siehe hier ):

  

# 6266 Brechen der Änderung: Thread-Destruktor sollte terminieren, wenn verbindbar.

     

# 6269 Breaking change: Thread move Zuweisung sollte terminieren, wenn verbindbar.

Was bedeutet das für meine bestehenden Projekte, die derzeit Boost 1.49.0 verwenden? Muss ich etwas ändern? Wenn ja, was muss ich genau ändern? Und was passiert, wenn ich eines meiner bestehenden Projekte vergesse? Bekomme ich Kompilierzeitfehler (hoffe ich) oder bekomme ich böse und schwer zu findende Laufzeitprobleme (das hoffe ich wirklich nicht)?

    
Robert Hegner 09.07.2012, 11:13
quelle

2 Antworten

7

Wenn es "Breaking change" heißt, heißt das: "Ihr Programm ist kaputt, wenn Sie von einem Verhalten abhängig sind, das vorher X war, jetzt aber Y ist."

Für die gegebenen zwei Änderungen bedeutet das, dass wenn Sie sich auf den Destruktor oder die Umzugsaufgabe verlassen, die join() (oder detach() ) aufruft, was meiner Meinung nach das vorherige Verhalten war, muss Ihr Programm jetzt explizit join() oder detach() oder treffe deinen Freund std::terminate() . Es ist kein Fehler bei der Kompilierung, aber es ist auch kein unvorhersehbares Laufzeitverhalten - Sie erhalten einen schönen sauberen Absturz, der direkt zu% destructor boost::thread führt, was die Ursache des Problems ist.

    
Puppy 09.07.2012, 11:16
quelle
7

Der folgende Code wird verwendet, um korrekt zu funktionieren, aber mit v3 wird das Programm abgebrochen, wenn t seinen Bereich verlässt, weil thread::~thread Aufrufe std::terminate aufruft, anstatt sich stillschweigend vom Thread zu trennen:

%Vor%     
Igor R. 09.07.2012 12:27
quelle

Tags und Links