Ausnahmeweitergabe zwischen Threads
In Multithread-Anwendungen ist es wichtig, Ausnahmen zu behandeln, die in Arbeitsthreads auftreten, ohne die gesamte Anwendung zum Absturz zu bringen. In diesem Artikel wird untersucht, wie Ausnahmen von Arbeitsthreads an den Hauptthread weitergegeben werden, damit der Aufrufer sie ordnungsgemäß behandeln kann.
Herausforderungen der Ausnahmeweitergabe
Ein naiver Ansatz besteht darin, Ausnahmen in Arbeitsthreads abfangen und deren Typ und Meldung aufzeichnen. Diese Methode ist jedoch auf einen bestimmten Satz von Ausnahmetypen beschränkt und erfordert manuelle Codeänderungen beim Hinzufügen neuer Ausnahmen.
Ausnahmeweitergabe mit Ausnahme_ptr
C 11 führt die Ausnahme_ptr ein Typ, der eine sichere und flexible Möglichkeit zum Speichern und Transportieren von Ausnahmen zwischen Threads bietet. Bei diesem Ansatz:
Codebeispiel
<code class="cpp">#include <iostream> #include <thread> #include <exception> #include <stdexcept> static std::exception_ptr myException; void f() { try { std::this_thread::sleep_for(std::chrono::seconds(1)); throw std::runtime_error("To be passed between threads"); } catch (...) { myException = std::current_exception(); // Store the exception } } int main() { std::thread myThread(f); myThread.join(); if (myException) { try { std::rethrow_exception(myException); // Rethrow the exception } catch (const std::exception& ex) { std::cerr << "Thread exited with exception: " << ex.what() << "\n"; } } return 0; }</code>
Multi- Thread-Überlegungen
In Szenarios mit mehreren Arbeitsthreads ist es notwendig, ein Array von Ausnahme_ptrs zu verwenden, um Ausnahmen von jedem Thread zu erfassen. Darüber hinaus handelt es sich bei „Exception_ptrs“ um gemeinsam genutzte Zeiger. Daher ist es wichtig sicherzustellen, dass mindestens ein „Exception_ptr“ auf jede Ausnahme zeigt, um eine vorzeitige Freigabe zu verhindern.
Das obige ist der detaillierte Inhalt vonWie können Ausnahmen zwischen Threads in C weitergegeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!