[c++] C++에서의 스레드 감시 및 관리

C++에서 멀티스레드 프로그래밍을 수행하면 스레드를 생성하고 관리하는 데 필요한 여러 도구와 기술이 필요합니다. 이 글에서는 C++에서 스레드를 감시하고 관리하는 여러 방법에 대해 알아보겠습니다.

1. std::thread와 std::mutex

C++11 표준부터는 std::threadstd::mutex와 같은 스레딩 관련 기능을 제공합니다. std::thread를 사용하여 스레드를 생성하고, std::mutex로 상호 배제를 수행하여 여러 스레드가 안전하게 공유 자원에 접근할 수 있습니다.

#include <iostream>
#include <thread>
#include <mutex>

std::mutex g_mutex;

void ThreadFunction() {
    g_mutex.lock();
    std::cout << "Thread running" << std::endl;
    g_mutex.unlock();
}

int main() {
    std::thread t(ThreadFunction);
    t.join();
    return 0;
}

2. 스레드 감시

std::thread 객체의 상태를 감시하여 스레드의 실행 여부를 파악할 수 있습니다. joinable() 함수를 사용하여 스레드가 아직 실행 중인지 확인할 수 있습니다.

if (t.joinable()) {
    // 스레드가 아직 실행 중일 때 수행할 작업
} else {
    // 스레드가 종료된 경우 수행할 작업
}

3. Future와 Promise

std::futurestd::promise를 사용하면 스레드가 완료될 때까지 기다리거나, 스레드의 결과를 반환받을 수 있습니다.

#include <iostream>
#include <thread>
#include <future>

void ThreadFunction(std::promise<int> & p) {
    // 스레드 로직 수행
    int result = 42;
    p.set_value(result);
}

int main() {
    std::promise<int> p;
    std::future<int> f = p.get_future();
    std::thread t(ThreadFunction, std::ref(p));
    t.join();
    int result = f.get();
    std::cout << "Thread result: " << result << std::endl;
    return 0;
}

결론

C++에서는 std::threadstd::mutex를 사용하여 스레드를 생성하고, 감시하며, 관리할 수 있습니다. 또한 std::futurestd::promise를 활용하여 스레드의 결과를 안전하게 반환받을 수 있습니다.

참고 문헌: