스레드의 예외가 발생하는 경우 해당 예외가 해당 스레드에서 발견되지 않으면 주 스레드가 영향을 받습니까?스레드의 예외
왜? 늘어나는만큼 내가 기억할 수있는, 예외는 스택을 기반으로하므로 하나가 발생하면 스택 unwinds 오른쪽? 그러나 스레드에 자체 스택이있는 경우 왜 주 스레드가 영향을 받습니까?
예 :
#include <iostream>
#include <thread>
#include <chrono>
int main()
{
std::thread([]{
throw std::runtime_error("HELLO");
}).detach();
std::this_thread::sleep_for(std::chrono::seconds(5));
}
이 스레드가 분리된다. 주 프로그램이 왜 충돌하는지 이해할 수 없습니다. 나에게 그것은 자식 프로세스가 충돌하여 부모가 충돌하는 것과 같습니다.
: 누군가 스레드의 예외 작동 방식을 설명 할 수 있습니까?
그러나 주 스레드에서 걸릴 수 없습니다. 자식 스레드 자체에서만. 그렇다면 왜 메인 쓰레드에 영향을 주어야합니까? – Brandon
분리가 실행될 때 스레드가 예외를 throw 할 수 있습니까? –
@VladfromMoscow 아니요. 나는 그것을 던지기 전에 5 초 동안 자게했다. 분리 할 충분한 시간을줍니다. 주 스레드를 10 초 동안 잠자기 상태로 만들었습니다. 그것은 실제로 무엇이든 충돌합니다. 동의 버튼 타이머가 냉각 될 때까지 다른 사람이 없다면 Dai의 답변을 수락 할 것입니다. 말된다. – Brandon