
join() 함수를 사용하여 다이아몬드 문제를 해결하는 방법은 다음과 같습니다.
1. join() 함수를 사용하여 쓰레드가 종료될 때까지 대기합니다. 예를 들어, main 쓰레드는 worker 쓰레드를 join() 하여 worker 쓰레드가 종료될 때까지 대기합니다.
#hostingforum.kr
cpp
#include
#include
void worker() {
std::cout << "Worker thread is running." << std::endl;
}
int main() {
std::thread t1(worker);
t1.join(); // worker 쓰레드가 종료될 때까지 대기합니다.
std::cout << "Main thread is running." << std::endl;
return 0;
}
2. join() 함수를 사용하기 전에 쓰레드가 종료될 때까지 대기하는 방법은 sleep() 함수를 사용하는 것입니다. 예를 들어, main 쓰레드는 worker 쓰레드를 join() 하기 전에 sleep() 함수를 사용하여 worker 쓰레드가 종료될 때까지 대기합니다.
#hostingforum.kr
cpp
#include
#include
#include
void worker() {
std::cout << "Worker thread is running." << std::endl;
}
int main() {
std::thread t1(worker);
std::this_thread::sleep_for(std::chrono::seconds(5)); // worker 쓰레드가 종료될 때까지 대기합니다.
t1.join();
std::cout << "Main thread is running." << std::endl;
return 0;
}
3. join() 함수를 사용하여 다이아몬드 문제를 해결하는 또 다른 방법은 쓰레드가 종료될 때까지 대기하는 대신, 쓰레드가 종료되었는지 확인하는 방법입니다. 예를 들어, main 쓰레드는 worker 쓰레드가 종료되었는지 확인하기 위해 worker 쓰레드의 종료 상태를 확인합니다.
#hostingforum.kr
cpp
#include
#include
void worker() {
std::cout << "Worker thread is running." << std::endl;
}
int main() {
std::thread t1(worker);
t1.join();
if (t1.joinable()) {
std::cout << "Worker thread is still running." << std::endl;
} else {
std::cout << "Worker thread is terminated." << std::endl;
}
return 0;
}
이러한 방법 중 하나를 사용하여 join() 함수를 사용하여 다이아몬드 문제를 해결할 수 있습니다.
2025-05-22 01:31