Application/기초

[기초] C++ 멀티스레딩 (Thread)

devsalix 2024. 4. 29. 08:26
728x90

 

스레드는 프로세스 내에서 실행되는 실행 단위입니다.

각 스레드는 동일한 데이터 영역을 공유하면서도 독립적으로 명령을 수행할 수 있습니다.

이를 통해 병렬 처리가 가능해지며, 멀티코어 프로세서의 이점을 살릴 수 있습니다.

 


 

C++에서의 스레드 사용

 

C++11부터는 '<thread>' 헤더를 통해 기본적인 스레드 지원이 포함되었습니다.

'<thread>' 라이브러리를 사용하면 POSIX 스레드(Pthreads)

또는 Windows 스레드와 같은 저수준 스레드 관리 기능을 직접 다루지 않고도

스레드를 손쉽게 사용할 수 있습니다.

 

예제 코드

 

#include <iostream>
#include <thread>

// 스레드에서 실행될 함수 정의
void threadFunction(int n) {
    for (int i = 0; i < n; ++i) {
        std::cout << "스레드 실행 중: " << i << std::endl;
    }
}

int main() {
    // 스레드 생성 및 실행
    std::thread t(threadFunction, 10);

    // 메인 스레드에서도 동시에 실행
    for (int i = 0; i < 10; ++i) {
        std::cout << "메인 실행 중: " << i << std::endl;
    }

    // 스레드가 완료될 때까지 대기
    t.join();

    return 0;
}

 

이 코드에서는 'threadFunction'이라는 함수를 정의하고, 이 함수를 별도의 스레드에서 실행합니다.

'std::thread' 객체 't'를 생성할 때 'threadFunction'을 인자와 함께 전달하며,

이 스레드는 메인 스레드와 병렬로 실행됩니다.

메인 스레드에서는 루프를 돌며 메시지를 출력하고,

't.join()'을 호출하여 't' 스레드가 종료될 때까지 메인 스레드의 실행을 대기시킵니다.

 

주의사항

 

  • 데이터 접근
    여러 스레드가 동시에 같은 데이터에 접근하려 할 때 발생하는 문제입니다.
    이를 해결하기 위해 뮤텍스(mutex)나 락(lock)을 사용할 수 있습니다.
  • 데드락
    두 스레드 또는 그 이상이 서로의 작업 완료를 무한히 기다리는 상태입니다.
    자원의 순서를 정하고 일관되게 자원을 획득하거나,
    필요한 자원을 한 번에 획득하는 등의 전략을 사용하여 데드락을 방지할 수 있습니다.

마무리

 

이 포스팅을 통해 C++의 기본 스레드 사용법에 대한 간략한 소개를 드렸습니다.

실제 애플리케이션에서 멀티스레딩을 활용할 때는 보다 복잡한 동기화 기술과 성능 최적화가 필요할 수 있으므로,

이러한 주제들을 더 깊게 다루는 학습이 필요합니다.

 

 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90
반응형