c++ 멀티 쓰레드 예제

c++ 멀티 쓰레드 예제

일반적으로 한 번에 두 개 이상의 스레드를 시작하고 병렬로 작업을 수행하려고합니다. 이를 위해 첫 번째 예제와 같은 단일 스레드를 만드는 것과 비교하여 스레드 배열을 만들 수 있습니다. 다음 예제에서 주 함수는 몇 가지 작업을 수행 하 고 스레드가 작업을 완료 할 때까지 대기 하는 10 스레드 그룹을 만듭니다 (이 문서에 대 한 github 리포지토리에이 예제의 POSIX 버전도 있습니다): 스레드에 대 한 호출 join() , 이전 예제에서 만든 프로그램을 다시 실행: 다중 스레딩에 대 한 기본 제공 지원 C ++11에서 도입 되었습니다. 헤더 파일 thread.h 다중 스레드 C ++ 프로그램을 만들기 위한 기능을 제공 합니다. 주 함수는 일반적으로 주 스레드라는 스레드이므로 위의 코드는 실제로 11 개의 스레드를 실행합니다. 이렇게 하면 스레드를 시작한 후 이 자습서의 끝에 있는 이미지 처리 예제에서 이 작업을 볼 수 있습니다. 스레드를 만들 때 함수의 포인터를 해당 생성자에게 전달할 수 있습니다. 스레드가 만들어지면 이 함수는 별도의 스레드에서 작업을 시작합니다. 예제 살펴보기: 주 스레드가 별도의 스레드를 만드는 예제를 살펴보겠습니다. 이 새 스레드를 만든 후 주 스레드는 콘솔에서 일부 데이터를 인쇄한 다음 새로 만든 스레드가 종료될 때까지 기다립니다. 이 간단한 예제 코드는 pthread_create() 루틴을 사용하여 5개의 스레드를 만듭니다. 각 스레드는 “Hello World!” 메시지를 인쇄한 다음 pthread_exit()에 대한 호출로 종료됩니다.

std::thread::id는 객체이며 콘솔에서도 비교하고 인쇄할 수 있습니다. 예를 들어 새로운 C++ 다중 스레딩 구문은 매우 쉽게 배울 수 있습니다. C 또는 C++에 익숙하고 다중 스레드 프로그램 작성을 시작하려는 경우이 문서는 적합합니다! 다중 스레드 프로그램에는 동시에 실행할 수 있는 두 개 이상의 부분이 포함되어 있습니다. 이러한 프로그램의 각 부분을 스레드라고 하며 각 스레드는 별도의 실행 경로를 정의합니다. 이전 예제에서는 이러한 함수 및 개체에 인수를 전달하지 않고 함수와 개체만 사용했습니다. C++14를 참조로 사용하지만 설명한 내용도 C++17에서 지원됩니다. 나는 일반적인 구문만 다룹니다. 이 프로그램을 읽은 후 자신의 다중 스레드 프로그램을 작성할 수 있어야 합니다. 이 예제에서는 Pthread 조인 루틴을 사용하여 스레드 완료를 기다리는 방법을 보여 줍니다. 스레드에서 매개 변수가있는 함수를 사용하는 것은 어떻습니까? C ++11 스레드 호출에 필요한 만큼 매개 변수를 추가할 수 있습니다. 예를 들어, 우리는 매개 변수로 정수를 수신하기 위해 위의 코드를 수정할 수 있습니다 (이 문서의 github 리포지토리에서이 예제의 POSIX 버전을 볼 수 있습니다): 다음 예제에서는 sligh를 다루어 병렬 프로그래밍의 힘을 설명하려고 합니다. 더 복잡한 문제: 흐림 필터를 통해 이미지에서 노이즈를 제거합니다.

아이디어는 픽셀과 그의 이웃의 가중 평균의 일종을 사용하여 이미지에서 노이즈를 발산 할 수 있다는 것입니다. 2010년 듀얼 코어 MacBook Pro에서 마지막 예제 코드를 실행한 결과는 다음 표에 표시됩니다. 다음 예제에서 설명한 대로 보이드를 가리키기 때문에 스레드 콜백에 데이터 형식을 전달할 수 있습니다 – C++는 다중 스레드 응용 프로그램에 대한 기본 제공 지원을 포함하지 않습니다. 대신 이 기능을 제공하기 위해 운영 체제에 전적으로 의존합니다. 이 튜토리얼은 최적의 이미지 처리에 관한 것이 아니며 저자는이 도메인의 전문가이므로 여기에서는 다소 간단한 접근 방식을 취할 것입니다. 우리의 목적은 병렬 코드를 작성하는 방법과 이미지를 효율적으로 읽거나 쓰거나 필터로 컨볼수 있는 방법을 설명하는 것입니다. 나는 예를 들어 대신 더 수행의 공간 컨볼루션의 정의를 사용했지만, 조금 더 어려운 구현, 빠른 푸리에 변환을 사용하여 주파수 도메인에서 컨볼루션.