스레드 간 예외 전파
소개:
멀티스레드 애플리케이션에서는 다음이 중요합니다. 예상치 못한 애플리케이션 충돌을 방지하기 위해 예외를 효과적으로 처리합니다. 여러 스레드로 작업할 때 작업자 스레드에서 발생하는 예외는 처리를 위해 기본 스레드로 다시 전파되어 애플리케이션이 안정적으로 유지되도록 해야 합니다.
예외 포인터를 사용하는 솔루션:
C 11에서는 스레드 경계를 넘어 예외를 전송할 수 있는 예외 포인터(Exception_ptr) 개념을 도입했습니다. 예외 포인터는 예외 개체에 대한 공유 포인터 참조를 보유합니다. 예는 다음과 같습니다.
<code class="cpp">#include <thread> #include <exception> std::exception_ptr exceptionPtr; void workerThread() { try { // Perform some task with potential exceptions } catch(...) { exceptionPtr = std::current_exception(); } } int main() { std::thread worker(workerThread); worker.join(); if (exceptionPtr) { try { std::rethrow_exception(exceptionPtr); } catch (const std::exception& ex) { // Handle the exception on the main thread std::cerr << "Exception occurred on worker thread: " << ex.what() << "\n"; } } return 0; }</code>
이 솔루션에서는 예외 포인터가 작업자 스레드에 생성되고 포착된 예외에 대한 참조가 할당됩니다. 그런 다음 메인 스레드는 예외 포인터가 존재하는지 확인하고 처리를 위해 예외를 다시 발생시킵니다.
참고:
위 내용은 C에서 스레드 간에 예외를 효과적으로 전파하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!