C에서 스레드 간 예외 전파
C에서 스레드 간 예외 전파 작업은 메인 스레드에서 호출된 함수가 여러 스레드를 생성할 때 발생합니다. CPU 집약적인 작업을 위한 작업자 스레드. 문제는 작업자 스레드에서 발생할 수 있는 예외를 처리하고 적절한 처리를 위해 이를 다시 메인 스레드로 전파하는 것입니다.
기존 접근 방식
한 가지 일반적인 접근 방식은 다음과 같습니다. 작업자 스레드에서 다양한 예외를 수동으로 포착하고 세부 정보를 기록한 다음 기본 스레드에서 다시 발생시킵니다. 그러나 이 방법은 고정된 예외 유형 집합만 지원한다는 제한이 있습니다. 향후에 새로운 예외 유형이 도입되면 코드를 수동으로 수정해야 합니다.
C 11 예외 처리
C 11에서는 더 강력한 솔루션을 제공하는 예외_ptr 유형을 도입합니다. 예외 전파를 위해. 이 유형을 사용하면 스레드 간에 예외를 전송할 수 있습니다.
구현 예
다음 예에서는 예외_ptr을 사용하여 예외를 전파하는 방법을 보여줍니다.
<code class="cpp">#include <iostream> #include <thread> #include <exception> #include <stdexcept> static std::exception_ptr eptr; void worker() { try { // Simulated CPU-intensive work with a delay std::this_thread::sleep_for(std::chrono::seconds(1)); throw std::runtime_error("Exception in worker thread"); } catch (...) { eptr = std::current_exception(); } } int main() { // Create a worker thread std::thread workerThread(worker); workerThread.join(); // Check if an exception occurred on the worker thread if (eptr) { try { // Rethrow the exception on the main thread std::rethrow_exception(eptr); } catch (const std::exception &ex) { // Handle the exception on the main thread std::cerr << "Worker thread exited with exception: " << ex.what() << "\n"; } } return 0; }</code>
이 예에서 작업자 스레드는 발생하는 모든 예외를 포착하고 이를 eptr에 할당합니다. 메인 스레드에서 eptr을 검사하고 예외가 있으면 다시 발생시킵니다.
다중 작업자 스레드에 대한 참고 사항
작업자 스레드가 여러 개 있는 경우 , 잠재적인 예외를 캡처하려면 각 스레드에 대해 별도의 예외_ptr 인스턴스를 유지해야 합니다.
추가 고려 사항
위 내용은 `Exception_ptr`을 사용하여 C의 스레드 간에 예외를 어떻게 전파합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!