Solaris. 더 신뢰할 수 있는 것이 프로그램이 없는 thread<;;;, 그래서 /sup> 1< sup> 분리되었는지 포로토콜 합류하는 것에 대해 여전히 '때' 주 () 는 스레드할 분리되었는지 종료하므로.
난 아무것도 찾을 수 없는 표준 (더 정확히 말하면, C++14 N3797 있는 구배면에), 괜찼습니다 1.10 disk_b_s10database 일어날 일을 설명하는 30.3 컨테인먼트하는 관련 내용.
< sup> 1< /sup>;;; 아마도, 다른 avamer 의문이다. " 수 있기 때문에, 판매업체에서 스레드할 분리되었는지 가입할 수 있는 발명, re 있는모든 포로토콜 you& again", # 39 합류할 수 있을 것이라고 이 아직 실행하는 동안 수행됨 스레드할 신호 부품 및 운용체계 (os) 를 넣을 수 있는 시간 수면 후 바로 스케줄러 스레드할 판단할 수 있다) 의 신호 수신 끝 없이 그 길을 수행되었는지 안정적으로 탐지합니다 스레드할 실제로 끝났습니다.
Main () 은 정의되지 않은 행동을 실행할 경우 '부족' 을 (를) 분리되었는지 스래드입니다 정의되지 않은 행동을 하지 않는 한 주 () '가' 분리하십시오 스레드할 표준용량 어졌다면 any 사용할 수 없다,, /sup> 스레드할 exits< sup> 2<.
따라서 '부족' 을 (를) 주 () 를 분리되었는지 스래드입니다 defined 효과가 있어야 합니다. 문제는: where (flash. C++ standard POSIX 아닌 아닌 OS docs.) 이러한 효과를 정의되어 있다.
< sup> 2< /sup>;;; 분리된 스레드할 就不可能拥有 참여됨 (flash. 것은 '참가하십시오 스레드할 표준용량 ()'). 결과를 기다리는 너회가 can 분리되었는지 스래드입니다 (예를 들면 통해 향후 "에서 '알파 (α), 또는 std::packaged_task 의해 세마포가 국기, 조건 또는 variable), t # 39 있다고 해서 끝나는 것이 아니라, doesn& thread executing. 그렇지 않으면 신호 넣고, 그 중 첫 번째 자동 객체에는 부품 꽂으십시오 소멸자 스레드할 will, 일반적으로 이 코드를 실행할 수 있는 코드 (소멸자) after 신호. Os 를 사용할 경우 주요 결과 및 실행을 마친 종료하십시오 스케줄링합니다 스레드할 전에 스레드할 분리되었는지 소멸자, 향후 ^ Wis 정의된 발생할 것 "이라고 말했다.
이 질문에 대한 대답은 어떻게 한 때 처음 질문으로 " 스레드할 분리되었는지 main () ',' exits". 입니다.
It 는 실행 (# 39, t say it 표준 doesn& 때문에 중지됨인) 및 that& # 39 에 정의된 deltamove 닿을 괜찼습니다 (자동 thread_local), 다른 스래드입니다 com/go/4e6b330a_kr 아니하고또 정적 객체.
이 나타날 수 있도록 정적 객체로 스레드할 관리자에만 (참고 [바이충스타르스테름] 에 따르면, 덕분에 많이 /4 @dyp 포인터입니다).
문제가 생길 수 있기 때문에, 다음 정권 때 정적임 객체에는 파괴를 마친 엑서큐션 들어갈 수 있는 전용 코드를 실행할 수 있는 신호 핸들러도 ( [바이충스타르스테름] dvi/1 개, 1st 마디였나 ). 즉, 오직 ',' 의 < atomic> C++ 표준 라이브러리는 라이브러리 ( [주포트.런타임] /9, 두 번째 마디였나 ). 특히 eneral-excludes condition_variable 그런 점에서 * '' (it& # 39 의 구현 정의된 래스터화되었는지, 즉 저장으로의 사용할 수 있는 신호 처리기, 같도다라고 it& # 39 에 속하지 않는 atomic> <, ',').
두 번째 질문에 대한 답을 분리되었는지 again" 판매업체에서 스래드입니다 ", 가입할 수 있습니다. 입니다.
예, '가족' 이 *_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 스레드할 분리되었는지 신호 또는 만 코드를 실행할 수 있는 신호를 처리기에서 스레드할 분리되었는지 약간만이라도 보장하고, 고쳐주렴.
< h3> Threads< 떼내면 /h3>;;;
['분리하십시오 스레드할 표준용량'] 따르면 (http://en.cppreference.com/w/cpp/thread/thread/detach):
>. 스레드 (thread 에서 개체 수 있으며, 따로 실행 >. 엑서큐션 계속하시겠습니까 용어이다. 모든 할당할지 리소스에는 될 것입니다. >. 일단 스레드할 종료하므로 풀려났다.
['Pthread_detach'] 에서 (http://pubs.opengroup.org/onlinepubs/009695299/functions/pthread_detach.html):
>. 이 pthread_detach () 함수를 나탸내도록 불지옥으 구현 (implementation) >. 그 때 그 스토리지로서 재확보할 수 있는 스레드할 스레드 >. 종료됩니다. 스레드할 않을 경우 아직 종료된 pthread_detach () >. 이로 인해 迈向 종료시킵니다. 여러 pthread_detach 페이징됩니다 효과 () >. 같은 컨트롤러상의 미지정을 대상 받고 있다.
주로 떼내면 스래드입니다 저장하기 위한 애플리케이션 완료하십시오 스레드할 기다릴 필요가 없으며, 리소스에는 경우 (예를 들면 데몬입니다 하는 실행하십시오 프로세스 종료 때까지).
< h3> 서있느라 Threads< /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) 및 다양한 임베디드 시스템, 할 수 있는 특수 및 / 또는 제한된 언어 라이브러리 구축 및 언어 지원 역시 제한적이다.
< h3> 스레드할 Support< /h3>;;;
< h3> 제어을 Threads< /h3>;;;
계속 해야 할 수 있는 적절한 hutdown 스레드할 제어할 경우 한 사용하는 동기화 프리미티브를 및 / 또는 일종의 기. 그러나 이 경우, 그 뒤를 이어 종료 플래그 설정 이후 s no, the way I join) 은 포지셔닝하십시오 there& # 39 에서 복잡성 증가 등 리소스에는 시점으로든지 떼내면 스래드입니다 석방될 것이라고 동시에건간에 어쨌든 여기서 몇 바이트입니다 7 의 ['스레드할 표준용량'], 또는 보다 더 높은 복잡도를 동기화됨 프리미티브를 객체에는 vs. 합니다 사용할 수 있습니다.
아직 끝난 뒤 프로그램 비헤이비어를 스레드할 종료하므로 정의되지 않았습니다. 그러나 현대의 운영 체제는 모든 프로세스에 의해 생성된 클린업합니다 스래드입니다 닫기와 거잖나.
한 때 ',' 이 세 가지 조건을 떼내면 스레드할 표준용량 계속해서 보호:
이 모든 '*' 더 이상 소유하는지 스레드할 1. '같음' 거짓 ' ()' 가 항상 결합 가능한 2. 3. ' ()' 은 'get_id 비유하 표준용량 스레드 id ()'
다음과 같은 코드를 살펴봅니다.
#include <iostream>
#include <string>
#include <thread>
#include <chrono>
void thread_fn() {
std::this_thread::sleep_for (std::chrono::seconds(1));
std::cout << "Inside thread function\n";
}
int main()
{
std::thread t1(thread_fn);
t1.detach();
return 0;
}
Linux system, 그 메시지는 &solarisdvd thread_fn 그것을 운영하는 것은 결코 인쇄되었습니다. Os 의 기본 () ' ()' 라 '대로 종료하므로 thread_fn 정리합니다. 항상 인쇄 () () '을 (를)' '메시지' t1.detach 교체하십니까 t1.join 강타했다.
주요 스레드할 때 (즉, 주 () 함수를 실행하는 스레드할) 종료 후 다른 모든 프로세스 종료되고 스래드입니다 세워줘.
다른 실행 할 수 있도록 계속 스래드입니다 스레드할 주 () 보다는 호출하여 종료시킵니다 pthread_exit 종료하십시오 (3).
Main 스레드할 pthread_exit 사용하는 경우, 다른 스레드와 기타 스래드입니다 반환 상태를 가져올 수 없습니다 (pthread_join (3) 를 통해 수행할 수 있다) 정리 할 수 없다. 또한 it& # 39 의 더 나은 분리할 수 있도록 스래드입니다 (pthread_detach (3)) 의 스레드할 자원이 자동으로 릴리즈됨 스레드할 종료. 공유 리소스를 릴리즈됨 않을 때까지 모든 스래드입니다 종료하십시오.