ホームページ  >  記事  >  バックエンド開発  >  C のスレッド間で例外を効果的に伝播する方法

C のスレッド間で例外を効果的に伝播する方法

DDD
DDDオリジナル
2024-11-01 06:12:31600ブラウズ

How to Effectively Propagate Exceptions Between Threads in C  ?

スレッド間での例外の伝播

はじめに:

マルチスレッド アプリケーションでは、次のことが重要です。例外を効果的に処理して、予期しないアプリケーションのクラッシュを防ぎます。複数のスレッドを使用する場合、ワーカー スレッドで発生した例外は処理のためにメイン スレッドに正常に伝播され、アプリケーションの安定性が確保される必要があります。

例外ポインタを使用した解決策:

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 例外をサポートします。例外とカスタム例外。
  • スレッドごとに個別の例外ポインタを維持することで、複数のワーカー スレッドで効果的に使用できます。
  • 例外ポインタは共有ポインタであり、早期の割り当て解除を防ぐためにスコープ内に保持する必要があります。基になる例外オブジェクトの。

以上がC のスレッド間で例外を効果的に伝播する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。