是否可以防止多執行緒應用程式在其執行緒之一執行非法操作(如整數除以零操作)時終止。這是一個示例代碼:
#include <iostream>
#include <thread>
#include <chrono>
void thread1() {
std::this_thread::sleep_for(std::chrono::seconds(2));
for (int i = 3; i >= 0; --i)
std::cout << (3 / i) << std::endl;
std::cout << "thread end" << std::endl;
}
int main() {
std::thread t(thread1);
t.detach();
std::cout << "before sleep\n";
std::this_thread::sleep_for(std::chrono::seconds(5));
//t.join();
std::cout << "after sleep\n";
}
在上面的代碼中,我正在嘗試在執行緒中進行整數除以零操作,這導致整個程式終止。
uj5u.com熱心網友回復:
不,一般來說這是不可能的;一個行程中的所有執行緒共享相同的記憶體空間,這意味著任何一個執行緒中的致命錯誤都可能破壞了行程中其他任何東西的資料結構,因此整個行程被終止。
如果你真的需要你的程式能夠在致命錯誤中幸存下來,那么有問題的代碼需要在一個單獨的子行程中執行,這樣當它崩潰時,父行程可以存活(并且可能重新啟動一個新的子行程,或任何合適的)。但一般而言,首選方法只是確保您的代碼不包含任何會導致崩潰的錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371851.html
