C++에서 멀티스레딩을 사용하는 방법

C Eseo Meoltiseuleding Eul Sayonghaneun Bangbeob



멀티스레딩 단일 프로그램 내에서 여러 실행 스레드를 실행하는 개념입니다. 여러 작업을 동시에 수행할 수 있으므로 C++과 같은 프로그래밍 언어에서 매우 유용한 기능입니다. C++에서는 멀티스레딩 를 통해 달성할 수 있습니다. <스레드> 라이브러리는 개발자가 여러 스레드를 생성, 관리 및 제어할 수 있도록 하는 일련의 클래스 및 기능을 제공합니다.

멀티스레딩 멀티태스킹과 같습니다. 둘 이상의 스레드가 동시에 실행 중임을 의미합니다. 이러한 프로그램에서 각 구성 요소는 스레드라고 하며 각 스레드는 고유한 실행 경로를 지정합니다. 에 대한 기본 제공 지원이 없습니다. 다중 스레드 C++ 11 이전의 프로그램. 대신 이 기능은 전적으로 운영 체제에서 제공합니다.







멀티스레딩 동시에 실행되는 더 작은 스레드로 프로그램을 나누는 것으로도 언급될 수 있습니다. 다음에 사용되는 스레드 클래스 멀티스레딩 C++에서는 수많은 스레드를 구성하고 실행을 관리할 수 있습니다.



C++에서 스레드 생성

C++에서 스레드를 생성하려면 다음을 사용합니다. 표준::스레드 내장 스레드 라이브러리에 포함된 클래스입니다. ㅏ 호출 가능 클래스 객체의 생성자에 대한 인수로 제공됩니다. 표준::스레드 새 스레드를 생성하기 위해. 스레드가 활성 상태일 때 실행되는 코드는 호출 가능 . 우리가 표준::스레드 개체에 의해 제공되는 코드를 발생시키는 새 스레드가 설정됩니다. 호출 가능 실행할 수 있습니다. 호출 가능 이 세 가지 방법을 사용하여 정의할 수 있습니다.



방법 1: 함수 포인터

호출 가능 함수 포인터를 사용하는 함수는 이렇게 정의할 수 있습니다.





무효 function_call ( 매개변수 )

함수가 구성되면 함수를 포함하는 스레드 개체가 다음과 같이 생성됩니다.



표준::스레드 thread_obj ( function_call, 매개변수 ) ;

방법 2: 함수 개체

함수 개체를 활용하는 동안 연산자 오버로딩이라는 아이디어를 활용합니다. 스레드가 형성되는 동안 실행되어야 하는 코드는 오버로드된 함수에 포함되어 있습니다.

클래스 Object_class {
무효 연산자 ( ) ( 매개변수 )
{
// 실행할 코드
}
} ;
표준::스레드 thread_object ( Object_class ( ) , 매개변수 )

방법 3: 람다 식

호출 가능 람다 식을 사용하는 함수는 다음과 같이 정의할 수 있습니다.

자동 f = [ ] ( 매개변수 ) {
// 실행할 코드
} ;
표준::스레드 thread_object ( 에프, 매개변수 ) ;

C++의 멀티스레딩 예제

#include
#include <스레드>
네임스페이스 표준 사용;

무효 func_thread ( 정수 N )
{
~을 위한 ( 정수 i = 0 ; 나 < N; 나++ ) {
쿠우트 << 'Thread 1 :: callable => 함수 포인터 사용 \N ' ;
}
}

클래스 thread_obj {
공공의:
무효 연산자 ( ) ( 정수 n ) {
~을 위한 ( 정수 i = 0 ; 나 < N; 나++ )
쿠우트 << 'Thread 2 :: callable => 함수 개체 사용 \N ' ;
}
} ;

정수 메인 ( )
{

자동 f = [ ] ( 정수 n ) {
~을 위한 ( 정수 i = 0 ; 나 < N; 나++ )
쿠우트 << 'Thread 3 :: 호출 가능 => 람다 식 사용 \N ' ;
} ;

스레드 th1 ( func_thread, 2 ) ;

스레드 th2 ( thread_obj ( ) , 2 ) ;

스레드 th3 ( 에프, 2 ) ;

th1.조인 ( ) ;

th2.join ( ) ;

th3.join ( ) ;

반품 0 ;
}

위의 코드에서 우리는 3개의 개별 스레드가 있는 3개의 스레드를 개발했습니다. 콜러블 - 함수 포인터, 개체 및 람다 식. 각 스레드는 두 개의 개별 인스턴스로 시작됩니다. 출력에 표시된 대로 3개의 스레드가 동시에 개별적으로 활성화됩니다.

산출

멀티스레딩의 장점과 단점

덕분에 더 많은 작업을 더 빨리 수행할 수 있습니다. 멀티스레딩 . 수많은 스레드가 동시에 다양한 작업을 수행할 수 있기 때문입니다. 멀티스레딩 프로그래머는 네트워크 활동을 하고, 사진이나 비디오를 처리하고, 나머지 응용 프로그램의 속도를 늦추지 않고 복잡한 계산을 수행할 수 있습니다. 멀티스레딩 사용자 인터페이스의 반응성을 높이는 데 도움이 됩니다. 별도의 스레드에서 화면을 변경하는 코드를 실행함으로써 UI 스레드는 사용자 입력에 대한 응답과 같은 다른 작업을 자유롭게 수행할 수 있습니다. 그 결과 사용자 인터페이스가 더 매끄럽고 빨라졌습니다.

그러나 사용에 약간의 제한이 있습니다. 멀티스레딩 . 작업할 때 주요 과제 중 하나 다중 스레드 프로그램은 경쟁 조건을 피하고 있습니다. 경쟁 조건은 두 개 이상의 스레드가 동시에 동일한 공유 리소스에 액세스하려고 시도하여 예측할 수 없는 동작이 발생하는 상황입니다. 경쟁 조건을 피하기 위해 개발자는 뮤텍스, 세마포어 및 장벽과 같은 동기화 기술을 사용합니다.

결론

멀티스레딩 C++에서 는 개발자가 여러 작업을 동시에 수행할 수 있는 프로그램을 만들 수 있도록 하는 강력한 개념입니다. 라이브러리에서 제공하는 스레드 클래스를 사용하여 개발자는 여러 스레드를 생성, 관리 및 제어할 수 있습니다. 멀티스레딩 성능을 개선하고 응답성을 높이며 시스템 리소스 제한을 극복하는 데 사용할 수 있습니다. 그러나 작업에 수반되는 어려움으로 인해 다중 스레드 프로그램에서 개발자는 경합 상태를 피하기 위해 주의를 기울이고 적절한 동기화 기술을 사용해야 합니다.