
Threaded::wait 함수는 스레드의 실행을 멈추게 하는 함수가 아닙니다. 대신, 스레드가 특정 조건이 만족할 때까지 대기하게 만듭니다.
스레드의 실행을 멈추게 하고 싶다면, 스레드가 특정 조건을 기다리는 동안 스레드의 실행을 멈추게 하려면, 조건 변수와 뮤텍스를 사용해야 합니다. 조건 변수는 스레드가 특정 조건을 기다리는 동안 대기할 수 있는 변수입니다. 뮤텍스는 스레드가 공유 자원을 사용하는 동안 다른 스레드가 접근하지 못하도록 보호하는 변수입니다.
조건 변수와 뮤텍스를 사용하여 스레드의 실행을 멈추게 하려면, 다음 단계를 수행하십시오.
1. 조건 변수와 뮤텍스를 선언합니다.
2. 스레드가 특정 조건을 기다리기 전에 뮤텍스를 잠금 상태로 설정합니다.
3. 스레드가 특정 조건을 기다리기 위해 조건 변수에 대기합니다.
4. 스레드가 특정 조건을 만족하면 조건 변수에 신호를 보냅니다.
5. 스레드가 조건 변수에 신호를 받으면 뮤텍스를 잠금 상태에서 해제합니다.
스레드의 실행을 다시 시작하려면, 스레드가 조건 변수에 대기하고 있는 동안 다른 스레드가 조건 변수에 신호를 보낼 수 있습니다. 스레드가 조건 변수에 신호를 받으면 스레드의 실행이 다시 시작됩니다.
예제 코드는 다음과 같습니다.
#hostingforum.kr
cpp
#include
#include
#include
#include
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker() {
std::unique_lock lock(mtx);
cv.wait(lock, []{ return ready; });
std::cout << "Worker thread is running." << std::endl;
}
int main() {
std::thread t(worker);
std::this_thread::sleep_for(std::chrono::seconds(2));
ready = true;
cv.notify_one();
t.join();
return 0;
}
이 예제 코드에서는 worker 함수가 조건 변수에 대기하고 있습니다. main 함수에서 ready 변수를 true로 설정하고 조건 변수에 신호를 보냅니다. worker 함수가 조건 변수에 신호를 받으면 스레드의 실행이 다시 시작됩니다.
2025-07-20 11:10