std::jthread

김대익·2022년 3월 25일
0

joining thread를 뜻한다.
jthread는 destruction에서 자동으로 rejoin이 되며, 어떤 상황에서는 그 thread가 멈출 수 있다.
스마트 포인터와 동작이 유사하다고 볼 수 있다.

일반적인 std::thread로 흐름을 만들고 join을 하지않고 main()이 종료되면 terminate가 call이 된다

std::jthread는 join이 없더라도 main()이 종료되면 jthread 객체의 destructor가 실행되면서
이 destructor가 join을 실행하기 때문에 먼저 실행되고있던 흐름이 없어지고 난 뒤
main()함수의 thread 객체가 없어지므로 더 안전하다

또한 stop token을 지원하여 thread로 만든 흐름이 끝나지않아 main()함수가 무한정 기다리는 것을 막아준다

jthread의 destructor는 실행되면서 먼저 request_stop을 실행하고 이후 join()을 실행한다.
따라서 위에서처럼 t1.request_stop(), t1.join()을 해주지않아도 알아서 동작한다

0개의 댓글