lock_guard하려면 어떤 시점에서 뮤텍스를 사용하고 블록을 떠날 때 잠금을 해제하십시오. 이를 위해이 std::lock_guard
및 std::unique_lock
제공 :thread_guard 등가는 표준 라이브러리를 수동으로 잠그고 잠금을 해제 할 수있는 기능과 더불어, <a href="http://en.cppreference.com/w/cpp/thread/mutex" rel="nofollow noreferrer"><code>mutex</code></a> 클래스를 제공/unique_lock
std::mutex m;
std::lock_guard<std::mutex> lock(m);
// ...
// Automatic unlock
내가 스레드에 대한 매우 일반적인 패턴은 하나를 만들 생각 (중 스택 변수 또는 구성원으로) 다음 join
it before destructing it :
std::thread t(foo);
// ...
t.join();
걸릴 것이다하는 thread_guard
쓰기 쉬운 것 같습니다 thread
(또는 thread
s의 순서), 그냥 자신의 파괴에 join
를 부를 것이다 :
std::thread t(foo);
thread_guard<std::thread> g(t);
// ...
// Join automatically
표준 라이브러리 클래스가 있습니까?
그렇지 않은 경우,이를 피할 수있는 이유가 있습니까?
항상 스레드를 분리 할 수 있으며 스레드가 종료되면 자동으로 "결합"됩니다 (실제로 결합되지는 않지만 자원은 동일하게 정리됩니다). –
@ JoachimPileborg 감사합니다. 분리는 뭔가 다르지만, 그렇지 않습니까? 블록을 떠나기 전에 (직접적으로, 간접적으로)'join '하면 블록이 종료되면 쓰레드가 끝났음을 알 수 있습니다. –
최근에 'joining_thread'가 제안되었지만 [shot down] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0379r0.html). –