[c++] C++에서의 스레드 감시 및 관리
C++에서 멀티스레드 프로그래밍을 수행하면 스레드를 생성하고 관리하는 데 필요한 여러 도구와 기술이 필요합니다. 이 글에서는 C++에서 스레드를 감시하고 관리하는 여러 방법에 대해 알아보겠습니다.
1. std::thread와 std::mutex
C++11 표준부터는 std::thread
와 std::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::future
와 std::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::thread
와 std::mutex
를 사용하여 스레드를 생성하고, 감시하며, 관리할 수 있습니다. 또한 std::future
와 std::promise
를 활용하여 스레드의 결과를 안전하게 반환받을 수 있습니다.
참고 문헌:
- C++ Reference (https://en.cppreference.com/)