주 스레드가 별도의 스레드를 만드는 예제를 살펴보겠습니다. 이 새 스레드를 만든 후 주 스레드는 콘솔에서 일부 데이터를 인쇄한 다음 새로 만든 스레드가 종료될 때까지 기다립니다. 다음 예제에서는 약간 더 복잡한 문제인 흐림 필터를 사용하여 이미지에서 노이즈를 제거하여 병렬 프로그래밍의 기능을 설명하려고 합니다. 아이디어는 픽셀과 그의 이웃의 가중 평균의 일종을 사용하여 이미지에서 노이즈를 발산 할 수 있다는 것입니다. 이전 예제에서는 이러한 함수 및 개체에 인수를 전달하지 않고 함수와 개체만 사용했습니다. 주 함수는 일반적으로 주 스레드라는 스레드이므로 위의 코드는 실제로 11 개의 스레드를 실행합니다. 이렇게 하면 스레드를 시작한 후 이 자습서의 끝에 있는 이미지 처리 예제에서 이 작업을 볼 수 있습니다. 스레드에서 매개 변수가있는 함수를 사용하는 것은 어떻습니까? C ++11 스레드 호출에 필요한 만큼 매개 변수를 추가할 수 있습니다. 예를 들어, 우리는 매개 변수로 정수를 수신하기 위해 위의 코드를 수정할 수 있습니다 (이 문서의 github 리포지토리에서이 예제의 POSIX 버전을 볼 수 있습니다): C ++14를 참조로 사용하지만 설명하는 내용은 C ++17에서도 지원됩니다. 나는 일반적인 구문만 다룹니다. 이 프로그램을 읽은 후 자신의 다중 스레드 프로그램을 작성할 수 있어야 합니다. C++에는 다중 스레드 응용 프로그램에 대한 기본 제공 지원이 포함되어 있지 않습니다.

대신 이 기능을 제공하기 위해 운영 체제에 전적으로 의존합니다. 이 튜토리얼은 최적의 이미지 처리에 관한 것이 아니며 저자는이 도메인의 전문가이므로 여기에서는 다소 간단한 접근 방식을 취할 것입니다. 우리의 목적은 병렬 코드를 작성하는 방법과 이미지를 효율적으로 읽거나 쓰거나 필터로 컨볼수 있는 방법을 설명하는 것입니다. 나는 예를 들어 대신 더 수행의 공간 컨볼루션의 정의를 사용했지만, 조금 더 어려운 구현, 빠른 푸리에 변환을 사용하여 주파수 도메인에서 컨볼루션. 새로운 C++ 멀티 스레딩 구문은 매우 쉽게 배울 수 있습니다. C 또는 C++에 익숙하고 다중 스레드 프로그램 작성을 시작하려는 경우이 문서는 적합합니다! std::thread::id는 객체이며 콘솔에서도 비교하고 인쇄할 수 있습니다. 예를 들어, 다중 스레딩에 대한 기본 지원이 C++11에 도입되었습니다. 헤더 파일 thread.h 다중 스레드 C ++ 프로그램을 만들기 위한 기능을 제공 합니다. 이전 예제에서 만든 스레드에 대해 join()를 호출하고 프로그램을 다시 실행합니다: 이 간단한 예제 코드는 pthread_create() 루틴을 사용하여 5개의 스레드를 만듭니다. 각 스레드는 “Hello World!” 메시지를 인쇄한 다음 pthread_exit()에 대한 호출로 종료됩니다.

이 예제에서는 구조를 통해 여러 인수를 전달하는 방법을 보여 주며 있습니다. 이 다음 예제에서 설명한 대로 보이드를 가리키기 때문에 스레드 콜백의 데이터 형식을 전달할 수 있습니다 – 다중 스레드 프로그램은 동시에 실행할 수있는 두 개 이상의 부분을 포함합니다.

Categories: Sin categoría