테스트를 완료했지만 스레드 실행 순서를 파악하지 않았습니다.
C++ multithreading : 실행 순서
내 코드입니다 : --- "N \ N func1func2의 \"표시됩니다
대기 4 초 동안 ---> :이 경우
void func1()
{
std::this_thread::sleep_for(std::chrono::milliseconds(4000));
std::cout<<"func1"<<std::endl;
}
void func2()
{
std::this_thread::sleep_for(std::chrono::milliseconds(4000));
std::cout<<"func2"<<std::endl;
}
int main()
{
std::thread t(func1);
std::thread t2(func2);
t.join();
t2.join();
std::this_thread::sleep_for(std::chrono::milliseconds(8000));
cout << "Hello World" << endl;
return 0;
}
, 나는 아래의 결과를 얻었다 >기다림 8 초 ---> "Hello world"가 표시됩니다.
나는 아래 main
의 코드의 순서를 변경하는 경우 :
t.join();
std::this_thread::sleep_for(std::chrono::milliseconds(8000));
t2.join();
난 그냥 위와 같은 결과를 얻을 수 있습니다.
단, I는 다음과 같이 변경하는 경우 :
std::this_thread::sleep_for(std::chrono::milliseconds(8000));
t.join();
t2.join();
결과가된다 :
대기 4 초간 ---> "func1func2의 \ n \ n"도시 ---> 대기 sec ---> "Hello world"가 표시됩니다.
이 경우 메인 스레드와 t 및 t2가 동시에 4 초 동안 대기하는 것으로 보입니다.
이 모든 것을 설명하는 방법은 무엇입니까?
병렬로 실행하면 스레드가 정확히 실행됩니다. 'join '을 호출하는 경우에만 하나의 스레드가 다른 스레드의 완료 상태를 기다립니다. 그래서 마지막 경우에, 쓰레드는 4 초 동안 대기하고, 끝내고, 메인 쓰레드는 8 초 동안 대기하고, 두 개의 쓰레드가 모두 끝나기 때문에'join'은 기다릴 필요가없고, "Hello World"를 출력합니다. –