thread c++ 예제

보시다시피 정수 값의 전역 벡터 vec가 있습니다. 두 스레드가 이 벡터에 동시에 액세스하려고 시도합니다: 첫 번째 스레드는 요소를 벡터로 푸시하고 두 번째 스레드는 벡터에서 요소를 팝하려고 시도합니다. C++에는 다중 스레드 응용 프로그램에 대한 기본 제공 지원이 포함되어 있지 않습니다. 대신 이 기능을 제공하기 위해 운영 체제에 전적으로 의존합니다. 다음 루틴은 POSIX 스레드를 만드는 데 사용됩니다 – 다음 예에서 나는 약간 더 복잡한 문제를 해결하여 병렬 프로그래밍의 힘을 설명하려고합니다 : 흐림 필터와 이미지에서 노이즈를 제거. 아이디어는 픽셀과 그의 이웃의 가중 평균의 일종을 사용하여 이미지에서 노이즈를 발산 할 수 있다는 것입니다. lambda를 사용하여 스레드를 만드는 주요 이점 중 하나는 로컬 매개 변수를 인수 목록으로 전달할 필요가 없다는 것입니다. 우리는 같은 캡처 목록을 사용할 수 있으며 람다의 폐쇄 속성은 수명 주기를 처리합니다. (std::thread 클래스에 액세스하려면 #include) 이전 예제에서 만든 스레드에 대해 join()를 호출하고 프로그램을 다시 실행해야 합니다: 멀티코어 및 멀티프로세서 시스템 멀티스레딩은 서로 다른 스레드가 동시에 실행됨을 의미합니다. 다른 코어 또는 프로세서에. 스레드는 사람입니다. 뮤텍스는 도어 핸들입니다. 자물쇠는 사람의 손입니다.

리소스가 전화입니다. 이 함수는 모든 스레드가 종료된 후에만 반환됩니다. 즉, 주 스레드는 자식 스레드가 실행을 완료하지 않을 때까지 기다립니다 . 여기에 포함되지 않은 덜 일반적인 몇 가지 다른 세부 사항이 있지만 직접 연구 할 수 있습니다 : 우리는 뮤텍스 사용의 또 다른 예를 살펴 볼 수 있습니다. 다음 상황을 상상해 보십시오: 클래스의 개체가 있는 스레드를 초기화하려면 이 클래스가 operator()를 오버로드해야 합니다. 이제 벡터를 두 섹션으로 분할하고 별도의 스레드 t1 및 t2에서 각 섹션의 총 합계를 계산할 수 있습니다. 다중 스레딩은 플랫폼(운영 체제, 가상 컴퓨터 등) 또는 응용 프로그램이 여러 스레드(스레드)로 구성된 프로세스를 만드는 기능입니다. 실행 스레드는 스케줄러에서 독립적으로 관리할 수 있는 가장 작은 프로그래밍 명령 시퀀스입니다. 이러한 스레드는 병렬로 실행할 수 있으며 프로그램의 효율성을 높일 수 있습니다. std:::thread는 C++에서 단일 스레드를 나타내는 스레드 클래스입니다. 스레드를 시작하려면 새 스레드 개체를 만들고 호출할 실행 코드(즉, 호출 가능한 개체)를 개체의 생성자로 전달하기만 하면 됩니다. 개체가 만들어지면 호출 가능으로 지정된 코드를 실행하는 새 스레드가 시작됩니다.

pthread_join() 서브루틴은 지정된 `threadid` 스레드가 종료될 때까지 호출 스레드를 차단합니다. 스레드를 만들 때 해당 특성 중 하나는 조인 또는 분리 여부를 정의합니다. 조인 가능한 것으로 생성된 스레드만 조인할 수 있습니다. 스레드가 분리된 것으로 작성된 경우 조인할 수 없습니다. 이제 클래스 myFunctor의 개체를 스레드 생성자에 전달 하여 스레드를 초기화할 수 있습니다: 볼 수 있듯이 주 스레드는 매개 변수 threadFunc을 사용하여 새 스레드 funcTest1을 만듭니다. 주 스레드는 funcTest1 스레드 종료를 기다리지 않습니다. 그것은 그것의 일을 계속합니다. 주 스레드는 실행을 완료하지만 funcTest1은 여전히 실행 중입니다. 이로 인해 오류가 발생합니다.

주 스레드가 종료되기 전에 모든 스레드를 종료해야 합니다. 주 함수는 일반적으로 주 스레드라는 스레드이므로 위의 코드는 실제로 11 개의 스레드를 실행합니다. 이렇게 하면 스레드를 시작한 후 이 자습서의 끝에 있는 이미지 처리 예제에서 이 작업을 볼 수 있습니다.