Warum wird der Destruktor einer Zukunft von der std::async-Blockierung zurückgegeben?
In C 11 wurde der Destruktor einer Zukunft von zurückgegeben std::async blockiert, was zu potenziellen Deadlocks führen kann. Dieses Verhalten löste Besorgnis aus und führte zu einer Reihe von Vorschlägen und Diskussionen innerhalb des Standardisierungsausschusses.
Der Kern des Problems liegt in der Gewährleistung der Thread-Sicherheit. Ohne das Blockierungsverhalten könnte eine Situation entstehen, in der ein zugehöriger Thread nach der Zerstörung des Futures weiterhin ausgeführt wird und keine Möglichkeit mehr besteht, seinen Abschluss zu synchronisieren. Dies könnte zu einer Speicherbeschädigung oder sogar zu einer Beeinträchtigung der Systemsicherheit führen.
Wie Hans Boehm in N3679 erklärt, wird dieses Szenario durch nicht behandelte Ausnahmen verschärft, die möglicherweise Code umgehen, der auf die Fertigstellung warten soll. Daher fungiert der blockierende Destruktor als Sicherheitsnetz und verhindert solche katastrophalen Folgen.
Trotz ausführlicher Überlegungen hat die C-Community in dieser Angelegenheit keinen Konsens erzielt. Ab C 14 blockieren die Destruktoren von std::future und std::thread weiterhin.
Die Situation kann sich jedoch in Zukunft ändern. Michael Wongs Reisebericht aus dem Jahr 2013 weist darauf hin, dass der Antrag auf Ablehnung von std::async zwar gescheitert ist, die potenzielle Gefahr, die von seinem Blockierungsverhalten ausgeht, jedoch zunehmend erkannt wird.
In der Zwischenzeit sollten sich Programmierer dessen bewusst sein Setzen Sie geeignete Maßnahmen wie Scope Guards oder explizite Synchronisierungsmechanismen ein und setzen Sie diese ein, um die Thread-Sicherheit bei der Arbeit mit Futures zu gewährleisten, die von std::async zurückgegeben werden.
Das obige ist der detaillierte Inhalt vonWarum blockiert der Destruktor einer „std::async'-Zukunft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!