sliver__

[Mastering C++ Programming] - Concurrency tasks 본문

CS/C++

[Mastering C++ Programming] - Concurrency tasks

sliver__ 2022. 12. 9. 16:26
728x90
  • 동시성 지원 모듈은 작업이라는 개념을 지원합니다. 
  • 작업은 여러 스레드에서 동시에 발생하는 작업입니다. 
  • packaged_task 클래스를 사용하여 동시 작업을 만들 수 있습니다. 
  • packaged_task 클래스는 스레드 함수, 해당 약속 및 기능 개체를 편리하게 연결합니다.

  • 간단한 예제를 통해 packaged_task의 사용법을 이해해 봅시다. 
  • 다음 프로그램은 람다 식과 함수를 사용하여 약간의 함수형 프로그래밍을 맛볼 수 있는 기회를 제공합니다.
#include <iostream>
#include <future>
#include <promise>
#include <thread>
#include <functional>
using namespace std;

int main ( ) {
     packaged_task<int (int, int)>
        addTask ( [] ( int firstInput, int secondInput ) {
              return firstInput + secondInput;
     } );
 
     future<int> output = addTask.get_future( );
     addTask ( 15, 10 );
 
     cout << "The sum of 15 + 10 is " << output.get() << endl;
     return 0;
}
  • 이전에 표시된 프로그램에서 addTask라는 packaged_task 인스턴스를 만들었습니다. 
  • packaged_task< int (int,int)> 인스턴스는 추가 작업이 정수를 반환하고 두 개의 정수 인수를 사용함을 의미합니다.

 

addTask ( [] ( int firstInput, int secondInput ) {
              return firstInput + secondInput;
});
  • 정의된 람다 함수입니다.

  • 흥미로운 부분은 main.cpp의 addTask( ) 호출이 일반 함수 호출처럼 보인다는 것입니다. 
  • future<int> 객체는 packaged_task 인스턴스 addTask에서 추출되며, 이후 get() 메서드인 future 객체 인스턴스를 통해 addTask의 출력을 검색하는 데 사용됩니다.
728x90
Comments