SW/C++

C++ : thread : 람다식 활용한 예제 : 쓰레드 리턴 값 참조 방법

얇은생각 2020. 3. 18. 07:30
반응형

 

C++ 쓰레드와 람다

 

예제

#include <iostream>
#include <sstream>
#include <string>
#include <thread>

using namespace std;

int main()
{
    auto printMessage = [](const std::string& message)
    {
        std::cout << message << std::endl;
    };
    
    std::thread thread(printMessage, "Message from a child thread.");
    
    printMessage("waiting the child thread...");
    thread.join();
    
    return 0;
}

// waiting the child thread...Message from a child thread.

 

쓰레드를 활용할 때 위와 같이 람다식을 사용할 수 있습니다.

 

 

 

std::ref()

T의 참조를 내포한 reference_wrapper 개체를 반환합니다. functional 헤더에 정의되어 있습니다.

thread를 인클루드하면, functional을 인클루드할 필요는 없습니다. 

 

 

 

예제

/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <iostream>
#include <sstream>
#include <string>
#include <thread>
#include <vector>

using namespace std;

int main()
{
    std::vector<int> list(100, 1);
    int result = 0;
    
    std::thread thread([](const std::vector<int>& v, int& result)
    {
        for (auto item : v)
        {
            result += item;
        }
    }, list, std::ref(result));
    
    thread.join();
    
    std::cout << "Result : " << result << std::endl;
    return 0;
}

// Result : 100                                                                   

 

람다식을 통해, 쓰레드를 실행시키고 해당 값을 위와 같이 반환받을 수 있습니다. 이 때, std::ref() 함수를 활용합니다.

반응형