SW/C++

[ C++ ] thread 개념 및 예제

얇은생각 2018. 11. 16. 14:41
반응형

프로그래밍에서 동시에 여러가지 동작을 하기 위해 스레드(thread)라는 개념을 도입하였습니다. 스레드는 하나의 프로그램이 마치 동시에 여러 개의 동작을 하는 것과 같은 효과를 표현하기 위해 운영체제에 도입된 개념입니다.


저는 웹 서핑을 할 때 주로 크롬을 이용합니다. 크롬은 움직이는 이미지를 보여주면서 그 동시에 음악도 들려줍니다. 휴대전화에서는 음악을 들으면서 메신저를 0할 수 있습니다. 이처럼 하나의 프로그램 안에서 동시에 여러개의 흐름이 있는 것처럼 효과를 내는 것이 바로 스레드라고 생각하시면 됩니다. 스레드는 굉장히 많이 사용되는 개념입니다. 반드시 다시 공부해나가야할 개념인 것 같습니다. 관련 개념으로 mutex와 atomic도 모두 스레드와 관련된 내용입니다.


스레드는 c++ 표준에는 자리 잡지 못하고 있었습니다. OS나 다른 라이브러리가 제공하는 스레드 기능을 사용해야만 했습니다. OS에서 각각 제공해주던 기능이 드디어 C++11에 표준으로 채택되었습니다. c++11 표준을 지원하는 환경이라면 사용 가능합니다. 


#include <iostream>
#include <thread>
using namespace std;
 
//스레드에 의해 호출되는 함수
void call_from_thread(int tid) {
    cout << "스레드 실행 " << tid << std::endl;
}
 
int main() {
    thread t[10];
 
    //10개의 스레드 시작
    for (int i = 0; i < 10++i) {
        t[i] = thread(call_from_thread, i);
    }
 
    std::cout << "메인 함수 시작" << endl;
 
    //스레드가 종료될 때 까지 대시
    for (int i = 0; i < 10++i) {
        t[i].join();
    }
 
    return 0;
}
 
cs




스레드 객체 10개를 선언하여 스레드를 실행하였습니다. call_from_thread() 함수를 실행합니다. 인수로 받은 tid를 화면에 출력하고 종료하는 함수이며 스레드가 모두 종료되기를 기다립니다. 실행을 여러 번 해보면 결과값이 달라진다는 것을 알 수 있습니다. 그 이유는 스레드가 따로 작동하고 종료된다는 것입니다. 만약 스레드의 개념과 동작이 이해가 되지 않으신다면 운영체제 서적을 참고하시는 것을 추천드립니다.

반응형

'SW > C++' 카테고리의 다른 글

[ C++ ] atomic 개념 및 예제  (0) 2018.11.16
[ C++ ] mutex 개념 및 예제  (0) 2018.11.16
[ C++ ] chrono 개념 및 예제  (0) 2018.11.16
[ C++ ] foward_list 개념 및 예제  (0) 2018.11.16
[ C++ ] array 개념 및 예제  (0) 2018.11.16