반도체/C++

29. C++의 스레드 개념

Clair_de_Lune 2024. 8. 30. 16:48
728x90

C++에서 스레드는 프로그램 내에서 동시에 실행되는 경량 프로세스를 의미합니다. 스레드를 사용하면 여러 작업을 병렬로 수행할 수 있어 프로그램의 성능을 향상시킬 수 있습니다. C++11부터는 <thread> 헤더를 통해 스레드를 쉽게 사용할 수 있는 기능이 추가되었습니다.

기본 개념

  1. 스레드 생성: std::thread 클래스를 사용하여 새로운 스레드를 생성할 수 있습니다. 스레드를 생성할 때 실행할 함수를 인자로 전달합니다.
    #include <iostream>
    #include <thread>
    
    void threadFunction() {
        std::cout << "스레드가 실행 중입니다." << std::endl;
    }
    
    int main() {
        std::thread t(threadFunction); // 스레드 생성
        t.join(); // 메인 스레드가 새로 생성한 스레드가 끝날 때까지 대기
        return 0;
    }
    
  2. 스레드 동기화: 여러 스레드가 공유 자원에 접근할 때 데이터 경합이 발생할 수 있습니다. 이를 방지하기 위해 std::mutex를 사용할 수 있습니다.
    #include <iostream>
    #include <thread>
    #include <mutex>
    
    std::mutex mtx; // 뮤텍스 객체
    int sharedResource = 0;
    
    void increment() {
        mtx.lock(); // 뮤텍스 잠금
        ++sharedResource;
        mtx.unlock(); // 뮤텍스 해제
    }
    
    int main() {
        std::thread t1(increment);
        std::thread t2(increment);
        t1.join();
        t2.join();
        std::cout << "공유 자원 값: " << sharedResource << std::endl;
        return 0;
    }
    
  3. 스레드 종료: 스레드가 실행을 마치면 join() 메서드를 사용하여 메인 스레드가 종료될 때까지 기다리게 할 수 있습니다. detach()를 사용하면 스레드를 독립적으로 실행할 수 있지만, 이 경우 스레드가 종료될 때까지 메인 스레드가 대기하지 않습니다.
  4. 스레드 안전성: 멀티스레딩 환경에서 프로그램이 안전하게 동작하도록 하기 위해 스레드 안전성을 고려해야 합니다. 이는 데이터를 보호하는 방법(뮤텍스, 세마포어 등)과 관련이 있습니다.

 

728x90