Main () 는 스레드할 분리되었는지 종료하므로 때 어떻게 됩니까?

39 m 시작 ',' 다음 'solaris. I& 스레드할 표준용량 분리하십시오 ()' 이 '실행' 을 맡고 있다, 그래서 한 번 이 경우에도 스레드할 스레드할 표준용량 아웃해야 댁이라면 내시경이요

Solaris. 더 신뢰할 수 있는 것이 프로그램이 없는 thread<;;;, 그래서 /sup&gt 1&lt sup&gt 분리되었는지 포로토콜 합류하는 것에 대해 여전히 '때' 주 () 는 스레드할 분리되었는지 종료하므로.

난 아무것도 찾을 수 없는 표준 (더 정확히 말하면, C++14 N3797 있는 구배면에), 괜찼습니다 1.10 disk_b_s10database 일어날 일을 설명하는 30.3 컨테인먼트하는 관련 내용.

&lt sup&gt 1&lt /sup>;;; 아마도, 다른 avamer 의문이다. &quot 수 있기 때문에, 판매업체에서 스레드할 분리되었는지 가입할 수 있는 발명, re 있는모든 포로토콜 you& again&quot, # 39 합류할 수 있을 것이라고 이 아직 실행하는 동안 수행됨 스레드할 신호 부품 및 운용체계 (os) 를 넣을 수 있는 시간 수면 후 바로 스케줄러 스레드할 판단할 수 있다) 의 신호 수신 끝 없이 그 길을 수행되었는지 안정적으로 탐지합니다 스레드할 실제로 끝났습니다.

Main () 은 정의되지 않은 행동을 실행할 경우 '부족' 을 (를) 분리되었는지 스래드입니다 정의되지 않은 행동을 하지 않는 한 주 () '가' 분리하십시오 스레드할 표준용량 어졌다면 any 사용할 수 없다,, /sup&gt 스레드할 exits&lt sup&gt 2&lt.

따라서 '부족' 을 (를) 주 () 를 분리되었는지 스래드입니다 defined 효과가 있어야 합니다. 문제는: where (flash. C++ standard POSIX 아닌 아닌 OS docs.) 이러한 효과를 정의되어 있다.

&lt sup&gt 2&lt /sup>;;; 분리된 스레드할 就不可能拥有 참여됨 (flash. 것은 '참가하십시오 스레드할 표준용량 ()'). 결과를 기다리는 너회가 can 분리되었는지 스래드입니다 (예를 들면 통해 향후 "에서 '알파 (α), 또는 std::packaged_task 의해 세마포가 국기, 조건 또는 variable), t # 39 있다고 해서 끝나는 것이 아니라, doesn& thread executing. 그렇지 않으면 신호 넣고, 그 중 첫 번째 자동 객체에는 부품 꽂으십시오 소멸자 스레드할 will, 일반적으로 이 코드를 실행할 수 있는 코드 (소멸자) after 신호. Os 를 사용할 경우 주요 결과 및 실행을 마친 종료하십시오 스케줄링합니다 스레드할 전에 스레드할 분리되었는지 소멸자, 향후 ^ Wis 정의된 발생할 것 "이라고 말했다.

질문에 대한 의견 (1)
해결책

이 질문에 대한 대답은 어떻게 한 때 처음 질문으로 &quot 스레드할 분리되었는지 main () ',' exits&quot. 입니다.

It 는 실행 (# 39, t say it 표준 doesn& 때문에 중지됨인) 및 that& # 39 에 정의된 deltamove 닿을 괜찼습니다 (자동 thread_local), 다른 스래드입니다 com/go/4e6b330a_kr 아니하고또 정적 객체.

이 나타날 수 있도록 정적 객체로 스레드할 관리자에만 (참고 [바이충스타르스테름] 에 따르면, 덕분에 많이 /4 @dyp 포인터입니다).

문제가 생길 수 있기 때문에, 다음 정권 때 정적임 객체에는 파괴를 마친 엑서큐션 들어갈 수 있는 전용 코드를 실행할 수 있는 신호 핸들러도 ( [바이충스타르스테름] dvi/1 개, 1st 마디였나 ). 즉, 오직 ',' 의 &lt atomic&gt C++ 표준 라이브러리는 라이브러리 ( [주포트.런타임] /9, 두 번째 마디였나 ). 특히 eneral-excludes condition_variable 그런 점에서 * '' (it& # 39 의 구현 정의된 래스터화되었는지, 즉 저장으로의 사용할 수 있는 신호 처리기, 같도다라고 it& # 39 에 속하지 않는 atomic&gt &lt, ',').

39, ve 풀려서 you& 않는 한 이 시점에서 it& # 39 의 하드 너회의 스택할 정의되지 않은 피하는 방법을 볼 수 있다.

두 번째 질문에 대한 답을 분리되었는지 again&quot 판매업체에서 스래드입니다 &quot, 가입할 수 있습니다. 입니다.

예, '가족' 이 *_at_thread_exit 기능 (() ',' () ',' notify_all_at_thread_exit std::promise::set_value_at_thread_exit.).

[질문], [2] 의 조건을 밝힌 바와 같이 꼬장꼬장 슈콜닉 교수의 남모를 비밀 핵 엇회전식 가변적입니다 신호 또는 세마포가 호스트였든 충분하지 않은 스레드할 분리되었는지 연결 (flash. 감지에서 확인할 수 있으므로 및끝 전에 들어온넘 있다. 엑서큐션 수신 신호 대기 중인 것 등) 의 스레드할) 때문에, 일반적으로 많이 있을 수 있다 (예: ' ()' 조건의 notify_all 후 실행될 코드를 변수, 특히 자동 및 소멸자 스레드 로컬 객체에는.

말 그대로 '스레드할 높여줍니까 신호 실행하는 것 ( 자동 및 소멸자 후 스레드 로컬 객체에는 들어온넘 있다.) 는 어떤 _at_thread_exit' 가족 '의 기능을 사용할 수 있도록 설계되었습니다.

그래서, 어떻게 하면 모든 것을 방지하기 위해 정의되지 않은 행동을 부재 속에 구축현 위의 표준 单捞磐啊 참여할 수 있어야 합니다 (수동) '기능을 수행할 수 있는' _at_thread_exit 스레드할 분리되었는지 신호 또는 만 코드를 실행할 수 있는 신호를 처리기에서 스레드할 분리되었는지 약간만이라도 보장하고, 고쳐주렴.

해설 (7)

&lt h3&gt Threads&lt 떼내면 /h3>;;;

['분리하십시오 스레드할 표준용량'] 따르면 (http://en.cppreference.com/w/cpp/thread/thread/detach):

&gt. 스레드 (thread 에서 개체 수 있으며, 따로 실행 &gt. 엑서큐션 계속하시겠습니까 용어이다. 모든 할당할지 리소스에는 될 것입니다. &gt. 일단 스레드할 종료하므로 풀려났다.

['Pthread_detach'] 에서 (http://pubs.opengroup.org/onlinepubs/009695299/functions/pthread_detach.html):

&gt. 이 pthread_detach () 함수를 나탸내도록 불지옥으 구현 (implementation) &gt. 그 때 그 스토리지로서 재확보할 수 있는 스레드할 스레드 &gt. 종료됩니다. 스레드할 않을 경우 아직 종료된 pthread_detach () &gt. 이로 인해 迈向 종료시킵니다. 여러 pthread_detach 페이징됩니다 효과 () &gt. 같은 컨트롤러상의 미지정을 대상 받고 있다.

주로 떼내면 스래드입니다 저장하기 위한 애플리케이션 완료하십시오 스레드할 기다릴 필요가 없으며, 리소스에는 경우 (예를 들면 데몬입니다 하는 실행하십시오 프로세스 종료 때까지).

  1. 응용 프로그램을 만들기 위해 사이드 핸들: '스레드할 표준용량' 객체에는 짐작할 수 없는 어떤 검색하기를 범위를 벗어나는 방법은 일반적으로 결합에 대한 요청 '표준용량 종료하십시오. ()' 파괴력에.
  2. Os 스레드할 정리할 수 있도록 특정 리소스 (TCB) 이 있기 때문에, 우리는 분명히 즉시 자동으로 스레드할 종료하므로 aren& # 39, t) 에 가입한 후에 스레드할 관심이 있어, 이미 분리되었는지 참가하십시오 스레드할 수 없다.

&lt h3&gt 서있느라 Threads&lt /h3>;;;

하나는 대한 프로세스 종료하십시오 비헤이비어를 같은지 잡을 수 있는, 적어도 일부 스레드할 주요 특징이다. 다른 스레드를 처리할 수 있는 신호를 여부를 그리 중요하지 한 주 내의 다른 스래드입니다 thread& # 39 의 신호 또는 종료시킵니다 참가할 수 있다고 처리기에서 호출. [(관련 질문] (https://stackoverflow.com/q/15658016/1175253))

이미 말씀드렸듯이 [any 스레드할 표시할지를 죽을 것인가, 그렇지 않은 분리되었거나 색상에는 프로세스 대부분의 os] (http://en.wikipedia.org/wiki/Thread_ (컴퓨팅)). 신호 처리 자체가 '또는' (), 높이는 종료하십시오 호출하여 종료할 수 있습니다 돌아온 의해 메인 함수. 그러나 정확한 동작을 할 수 없고 C++11 않는 반면, Java VM 기반 OS 의 개발자들은 정의하십시오 흘로 추상 등 어느 정도 차이가 있습니다. 이국적인 아파이크, 프로세스 및 스레팅 모델은 주로 고대 플랫폼 (라우팅할 c++컴파일러는 아마 11 원 에, & # 39 와 t be) 및 다양한 임베디드 시스템, 할 수 있는 특수 및 / 또는 제한된 언어 라이브러리 구축 및 언어 지원 역시 제한적이다.

&lt h3&gt 스레드할 Support&lt /h3>;;;

39 aren& 스래드입니다 경우, t 지원 'std::thread::get_id ()' 복귀해야 there& # 39 의 잘못된 id (표준용량 스레드 id 구축한 '기본') 를 실행할 수 있는 일반 프로세스가 필요하지 않으므로 스레드할 객체에는 및 구성자를 던져야 한다고 5 의 ['스레드할 표준용량'] 는 'std::system_error'. # 39 이것은 어떻게 알고 함께 today& C++11 의 os. # 39 의 경우 OS 와 스레팅 there& 경우, 이 프로세스를 생성할 수 없다) 가 지원하는 doesn& # 39 주 스레드할 알려주세요.

&lt h3&gt 제어을 Threads&lt /h3>;;;

계속 해야 할 수 있는 적절한 hutdown 스레드할 제어할 경우 한 사용하는 동기화 프리미티브를 및 / 또는 일종의 기. 그러나 이 경우, 그 뒤를 이어 종료 플래그 설정 이후 s no, the way I join) 은 포지셔닝하십시오 there& # 39 에서 복잡성 증가 등 리소스에는 시점으로든지 떼내면 스래드입니다 석방될 것이라고 동시에건간에 어쨌든 여기서 몇 바이트입니다 7 의 ['스레드할 표준용량'], 또는 보다 더 높은 복잡도를 동기화됨 프리미티브를 객체에는 vs. 합니다 사용할 수 있습니다.

해설 (2)

아직 끝난 뒤 프로그램 비헤이비어를 스레드할 종료하므로 정의되지 않았습니다. 그러나 현대의 운영 체제는 모든 프로세스에 의해 생성된 클린업합니다 스래드입니다 닫기와 거잖나.

한 때 ',' 이 세 가지 조건을 떼내면 스레드할 표준용량 계속해서 보호:

이 모든 '*' 더 이상 소유하는지 스레드할 1. '같음' 거짓 ' ()' 가 항상 결합 가능한 2. 3. ' ()' 은 'get_id 비유하 표준용량 스레드 id ()'

해설 (4)

다음과 같은 코드를 살펴봅니다.


#include 
#include 
#include 
#include 

void thread_fn() {
  std::this_thread::sleep_for (std::chrono::seconds(1)); 
  std::cout 
해설 (1)

주요 스레드할 때 (즉, 주 () 함수를 실행하는 스레드할) 종료 후 다른 모든 프로세스 종료되고 스래드입니다 세워줘.

참조: https://stackoverflow.com/a/4667273/2194843

해설 (0)

다른 실행 할 수 있도록 계속 스래드입니다 스레드할 주 () 보다는 호출하여 종료시킵니다 pthread_exit 종료하십시오 (3).

39 의 벌금을 it& pthread_exit 사용할 수 있는 메인. Pthread_exit 스레드할 하지 않을 때 사용되는 기본 실행 및 상태 그대로 남아 좀비 (없어진) 때까지 다른 모든 스래드입니다 종료하십시오.

Main 스레드할 pthread_exit 사용하는 경우, 다른 스레드와 기타 스래드입니다 반환 상태를 가져올 수 없습니다 (pthread_join (3) 를 통해 수행할 수 있다) 정리 할 수 없다. 또한 it& # 39 의 더 나은 분리할 수 있도록 스래드입니다 (pthread_detach (3)) 의 스레드할 자원이 자동으로 릴리즈됨 스레드할 종료. 공유 리소스를 릴리즈됨 않을 때까지 모든 스래드입니다 종료하십시오.

해설 (2)