반도체/C++

30. C++ 스레드 생성 방법

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

C++에서 스레드를 생성하는 방법은 주로 std::thread 클래스를 사용하는 것입니다. C++11부터 제공되는 이 클래스는 스레드를 쉽게 생성하고 관리할 수 있게 해줍니다. 스레드를 생성하는 기본적인 방법은 다음과 같습니다.

스레드 생성 방법

  1. 함수 포인터를 사용한 스레드 생성: 기본적인 스레드 생성 방법은 실행할 함수를 포인터로 전달하는 것입니다.
    #include <iostream>
    #include <thread>
    
    void threadFunction() {
        std::cout << "스레드가 실행 중입니다." << std::endl;
    }
    
    int main() {
        std::thread t(threadFunction); // 스레드 생성
        t.join(); // 메인 스레드가 t 스레드가 종료될 때까지 대기
        return 0;
    }
    
  2. 람다 함수를 사용한 스레드 생성: C++11에서는 람다 함수를 사용하여 스레드를 생성할 수도 있습니다.
    #include <iostream>
    #include <thread>
    
    int main() {
        std::thread t([]() {
            std::cout << "람다 스레드가 실행 중입니다." << std::endl;
        });
        t.join(); // 메인 스레드가 t 스레드가 종료될 때까지 대기
        return 0;
    }
    
  3. 클래스 멤버 함수를 사용한 스레드 생성: 클래스의 멤버 함수를 스레드로 실행할 때는 객체를 인자로 전달해야 합니다.
  4. cpp

    #include <iostream>
    #include <thread>
    
    class MyClass {
    public:
        void memberFunction() {
            std::cout << "클래스 멤버 스레드가 실행 중입니다." << std::endl;
        }
    };
    
    int main() {
        MyClass obj;
        std::thread t(&MyClass::memberFunction, &obj); // 멤버 함수와 객체를 인자로 전달
        t.join(); // 메인 스레드가 t 스레드가 종료될 때까지 대기
        return 0;
    }
    

스레드 생성 시 주의사항

  • join() 또는 detach() 호출: 생성된 스레드는 반드시 join() 또는 detach() 메서드를 호출하여 종료를 관리해야 합니다. 그렇지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.
  • 스레드 안전성: 여러 스레드가 공유 자원에 접근할 경우, 데이터 경합을 피하기 위해 적절한 동기화 방법(예: std::mutex)을 사용해야 합니다.
728x90