c++ thread 예제

août 2, 2019 8:04 Publié par

이제 myFunctor 클래스의 publicFunction()을 사용하여 스레드를 초기화할 수 있습니다: 멀티스레딩은 멀티태스킹의 특수한 형태이며 멀티태스킹은 컴퓨터가 두 개 이상의 프로그램을 동시에 실행할 수 있게 해주는 기능입니다. 일반적으로 멀티태스킹에는 프로세스 기반과 스레드 기반의 두 가지 유형이 있습니다. 위의 코드의 상대적 단순성 비교 POSIX 스레드를 사용하는 동등한 코드: 이 함수는 모든 스레드가 종료된 후에만 반환됩니다. 즉, 주 스레드는 자식 스레드가 실행을 완료하지 않을 때까지 기다립니다. 이 함수는 상위 스레드에서 스레드를 분리합니다. 부모 스레드와 자식 스레드를 서로 독립적으로 실행할 수 있습니다. detach() 함수를 호출한 후 스레드는 어떤 식으로든 동기화되지 않습니다: C++11 멀티스레딩 지원에 대해 학습하기 위한 좋은 책은 C++ 동시성 작동: Anthony Williams의 실용적인 멀티스레딩: 실제 응용 프로그램에서 « call_from_ 스레드 »함수는 주 함수와 독립적으로 일부 작업을 수행합니다. 이 특정 코드의 경우 주 함수는 스레드를 만들고 스레드가 t1.join()에서 끝날 때까지 기다립니다. 스레드가 작업을 완료할 때까지 기다리는 것을 잊어버린 경우 main이 먼저 완료되고 « call_from_thread »가 완료되었는지 여부에 관계없이 프로그램이 이전에 만든 스레드를 종료할 수 있습니다.

이 예제에서는 Pthread 조인 루틴을 사용하여 스레드 완료를 기다리는 방법을 보여 줍니다. 함수를 사용할 뿐만 아니라 스레드를 초기화할 수 있습니다. 이 목적의 함수 오브젝트(functor) 또는 클래스의 멤버 함수에 사용할 수 있습니다. 프로세스에서 만들 수 있는 최대 스레드 수는 구현에 따라 다릅니다. 스레드가 만들어지면 스레드는 피어이며 다른 스레드를 만들 수 있습니다. 스레드 간에 는 암시적 계층 구조 또는 종속성이 없습니다. 주 스레드가 자식 스레드의 종료를 기다리고 있지 않다는 것을 알 수 있습니다. std::thread 개체에 연결된 스레드가 없는 경우 get_id()는 기본 생성된 std:::thread::id 개체 즉 스레드가 반환됩니다.

스레드에서 매개 변수가있는 함수를 사용하는 것은 어떻습니까? C ++11 스레드 호출에 필요한 만큼 매개 변수를 추가할 수 있습니다. 예를 들어, 우리는 매개 변수로 정수를 수신하기 위해 위의 코드를 수정할 수 있습니다 (이 문서의 github 리포지토리에서이 예제의 POSIX 버전을 볼 수 있습니다): 듀얼 코어 컴퓨터에서이 코드는 병렬로 실행하기 위한 완벽한 속도 2x를 가지고 있습니다. 직렬 모드(단일 스레드)의 코드입니다. C+11에서 다중 스레딩 지원이 도입되었습니다. C++11 이전에는 C에서 POSIX 스레드 또는 p 스레드 라이브러리를 사용해야 했습니다. 이 라이브러리는 기능을 제공하는 표준 언어의 부족이 심각한 이식성 문제를 일으켰습니다. C ++ 11은 모든 것을 없애고 우리에게 std ::thread를 주었습니다. 스레드 클래스 및 관련 함수는 스레드 헤더 파일에 정의됩니다.

거기 당신은 그것을 가지고있다. 스레드를 만드는 것은 위에서 설명한 것처럼 간단합니다. std::thread: 스레드는 생성자 인수로 제공되는 최상위 함수에서 시작하여 연결된 스레드 개체를 생성즉시 실행을 시작할 수 있습니다(OS 스케줄링 지연 대기 중). 최상위 함수의 반환 값은 무시되며 예외를 throw하여 종료되는 경우 std::terminate가 호출됩니다. 최상위 함수는 std::promise를 통해 또는 공유 변수를 수정하여 호출자에게 반환 값 또는 예외를 전달할 수 있습니다(동기화가 필요할 수 있음, std::mutex 및 std:atomic 참조) C++에는 기본 제공 지원이 포함되지 않습니다. 다중 스레드 응용 프로그램입니다.

Classés dans :Non classé

Cet article a été écrit par NotreSite

Les commentaires sont fermés.