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은 여러 뮤텍스를 동시에 잠그되, 하나라도 못 얻으면 바로 포기하고 해제하는 비차단 방식이에요.

더 알아보기 (Learn more)

cppreference