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)?
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.
Tags und Links c++ boost boost-thread