try_lock — std::try_lock
try_lock — std::try_lock
std::try_lock은 주어진 여러 Lockable 객체 lock1, lock2, ..., lockn 각각에 try_lock을 호출해 잠가보는 함수예요. C++11에서 도입됐어요. <mutex> 헤더에 있어요.
성공적으로 잠근 개수를 반환하거나 0(=실패)을 반환해요.
출처: cppreference
본문
// <mutex> 헤더, C++11
template< class Lockable1, class Lockable2, class... LockableN >
int try_lock( Lockable1& lock1, Lockable2& lock2, LockableN&... lockn );
여러 뮤텍스에 비차단(non-blocking)으로 잠금을 시도해요.
반환 값
- 성공 — 모든 뮤텍스를 잠갔으면
-1. - 실패 — 어떤 뮤텍스(
locki)를 잠그지 못했으면0기반 인덱스i. 그 전에 잠갔던 것들은 해제돼요.
사용 예
#include <mutex>
std::mutex m1, m2;
int r = std::try_lock(m1, m2); // 모두 성공하면 -1
if (r == -1) {
// 두 뮤텍스 모두 소유
m1.unlock();
m2.unlock();
} else {
// 실패 — 이미 잠근 것은 자동 해제됨
}
특징
- 비차단 — 한 번에 하나씩
try_lock()호출, 실패 시 그 시점까지 잠근 것 해제. - 여러 뮤텍스를 동시에 잡되 블로킹을 원하지 않을 때 사용해요.
- 블로킹을 허용하려면
std::lock을 써요.
std::try_lock은 여러 뮤텍스를 동시에 잠그되, 하나라도 못 얻으면 바로 포기하고 해제하는 비차단 방식이에요.