libstdC++ 코드를 조사한 결과, operator>>
또는 operator<<
이 취소 점 pthread
(이는 올바르게 이해하면 특수 마법 예외 객체를 던짐으로써 구현 됨)로 인터럽트 된 it sets the badbit on a stream에 놀랐습니다.istream/ostream의 IO 기능에서 pthread를 취소하면 badbit이 설정되는 이유는 무엇입니까?
분명히 C++ 표준에서는 해당 I/O 함수로 이스케이프하는 예외가 badbit를 설정해야합니다. 그러나 내 이해를 위해 pthread 취소는 C++의 "예외"로 간주 할 필요가 없습니다.
cout
과 친구들을 사용하는 스레드 pthread_cancel
을 호출 할 때 입출력을 수행하는 스레드가 종료 된 후에 항상 badbit를 지워야한다는 의미입니까? (스레드가 badbit를 발생시킨 경우를 대비하여) 설정 되나요?)
스레드 종료는 대개 잘못된 생각으로 간주됩니다. – Puppy
스트림 추출 중에 이러한 취소가 발생한 후에 어떻게 스트림을 사용 하시겠습니까? 다른 스레드는 얼마나 많은 문자가 추출되었는지, 또는 취소 된 추출에서 "남은 부분"이 있는지를 알지 못합니다. 마찬가지로, 삽입의 경우, 스트림은 삽입 된 데이터가 유효한 상태임을 보증 할 수 없습니다. – dyp
@DeadMG 동의하며 그렇게하지 않습니다. 그러나 우리가 나쁜 일을 더 악화 시키면 안됩니다. 그래서 libstdC++가 이런 식으로하는 이유가있을 것입니다. –