실행 중인 std::thread 상태 확인
C에서 std::thread는 동시성을 구현하기 위한 클래스 유형입니다. std::thread가 여전히 실행 중인지 확인하는 것은 어려울 수 있습니다. 특히 플랫폼 독립성이 중요한 경우에는 더욱 그렇습니다.
원래 std::thread에는 timed_join() 메서드가 없었고 Joinable()은 이 목적. std::lock_guard를 활용하여 스레드 내의 뮤텍스를 잠근 다음 try_lock() 메서드를 사용하여 여전히 잠겨 있는지 평가하여 스레드의 실행 상태를 나타내는 대체 솔루션이 제안됩니다. 그러나 이 전략은 불필요하게 복잡한 것으로 간주됩니다.
스레드 상태 확인을 위한 우아한 솔루션
더 깔끔한 접근 방식을 위해 std::async 및 std::future 활용을 고려하세요. std::async는 별도의 스레드에서 비동기 작업을 활성화하고 std::future는 작업 결과를 검색하는 것을 허용합니다. std::future의 wait_for 함수를 0밀리초 시간 초과와 함께 사용하면 스레드가 여전히 실행 중인지 효과적으로 확인할 수 있습니다.
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { // Create an asynchronous task on a new thread using std::async. auto future = std::async(std::launch::async, [] { std::this_thread::sleep_for(3s); return 8; }); // Check thread status using wait_for() with zero milliseconds. auto status = future.wait_for(0ms); // Print status according to the wait_for() result. if (status == std::future_status::ready) { std::cout << "Thread finished" << std::endl; } else { std::cout << "Thread still running" << std::endl; } auto result = future.get(); // Retrieve result. }
또는 std::promise를 사용하여 다음에서 future 객체를 얻을 수 있습니다. a std::thread:
#include <future> #include <thread> #include <chrono> #include <iostream> int main() { // Create a promise and its associated future. std::promise<bool> p; auto future = p.get_future(); // Run a task on a new thread using std::thread. std::thread t([&p] { std::this_thread::sleep_for(3s); p.set_value(true); // Set the promise value atomically. }); // Check thread status using wait_for() as previous example. auto status = future.wait_for(0ms); // Print status according to the wait_for() result. if (status == std::future_status::ready) { std::cout << "Thread finished" << std::endl; } else { std::cout << "Thread still running" << std::endl; } t.join(); // Join the thread. }
두 예제 모두 상태가 확인되었기 때문에 처음에는 "Thread still running"이 표시됩니다. 스레드가 완료되기 전에. 그러나 훨씬 더 간단한 해결책은 원자 부울 플래그를 활용하는 것입니다.
#include <thread> #include <atomic> #include <chrono> #include <iostream> int main() { // Use an atomic boolean flag for thread status tracking. std::atomic<bool> done(false); // Run a task on a new thread that sets `done` to true when finished. std::thread t([&done] { std::this_thread::sleep_for(3s); done = true; }); // Check thread status using atomic flag. if (done) { std::cout << "Thread finished" << std::endl; } else { std::cout << "Thread still running" << std::endl; } t.join(); // Join the thread. }
위 내용은 C에서 실행 중인 std::thread의 상태를 효율적으로 확인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!