[c++] C++에서의 스레드 관리
C++ 프로그래밍 언어는 스레드를 관리하기 위한 여러 가지 방법을 제공합니다. 이를 통해 멀티스레딩 환경에서 동시성을 제어하고 효율적으로 작업을 처리할 수 있습니다.
1. 스레드 생성
C++11부터는 std::thread
를 사용하여 스레드를 생성할 수 있습니다. 아래는 간단한 예제 코드입니다.
#include <thread>
#include <iostream>
void threadFunction() {
std::cout << "This is a thread" << std::endl;
}
int main() {
std::thread t(threadFunction);
t.join();
return 0;
}
2. 스레드 동기화
C++는 std::mutex
, std::unique_lock
, std::condition_variable
등을 활용하여 스레드 간의 동기화를 제공합니다. 이를 통해 공유 자원에 대한 안전한 접근을 보장할 수 있습니다.
#include <mutex>
#include <thread>
#include <iostream>
std::mutex mtx;
int sharedData = 0;
void threadFunction() {
std::unique_lock<std::mutex> lock(mtx);
sharedData++;
std::cout << "Shared data: " << sharedData << std::endl;
}
int main() {
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
return 0;
}
3. 스레드 관리
C++는 std::thread::join
, std::thread::detach
등을 사용하여 생성된 스레드를 관리할 수 있습니다.
join
: 해당 스레드가 종료될 때까지 대기detach
: 해당 스레드를 백그라운드로 실행
#include <thread>
#include <iostream>
void threadFunction() {
std::cout << "This is a thread" << std::endl;
}
int main() {
std::thread t(threadFunction);
t.detach(); // 백그라운드 실행
// t.join(); // 주석 해제 시 백그라운드 실행 대기
return 0;
}
C++를 사용하여 스레드를 관리하면 멀티스레드 환경에서 안전하고 효율적으로 프로그램을 작성할 수 있습니다.
참고 자료
- https://en.cppreference.com/w/cpp/thread
- https://www.modernescpp.com/index.php/c-core-guidelines-the-thread-api-of-c11
이러한 기능은 C++11 이상에서부터 사용할 수 있습니다.