Namespaces
Variants

std::recursive_mutex:: try_lock

From cppreference.net

Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
bool try_lock ( ) noexcept ;
(C++11 이후)

뮤텍스를 잠그려고 시도합니다. 즉시 반환됩니다. 잠금 획득에 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

이 함수는 허위로 실패할 수 있으며, 다른 스레드에 의해 현재 뮤텍스가 잠겨 있지 않은 경우에도 false 를 반환할 수 있습니다.

스레드는 재귀적 뮤텍스에서 try_lock 을 반복적으로 호출할 수 있습니다. try_lock 호출이 성공할 때마다 소유권 카운트가 증가합니다: 뮤텍스는 스레드가 unlock 을 해당 횟수만큼 호출한 후에만 해제됩니다.

소유권의 최대 계층 수는 명시되어 있지 않습니다. 이 수를 초과할 경우 try_lock 호출은 false 를 반환합니다.

동일한 뮤텍스에 대한 이전 unlock() 연산은 이 연산이 true 를 반환할 경우 (이 연산과) 동기화됩니다 ( std::memory_order 에 정의된 대로). 이 연산이 false 를 반환할 경우 이전 lock() 연산은 이 연산과 동기화되지 않습니다.

목차

매개변수

(없음)

반환값

true 락이 성공적으로 획득된 경우, 그렇지 않으면 false .

예외

아무것도 던지지 않습니다.

예제

#include <iostream>
#include <mutex>
int main()
{
    std::recursive_mutex test;
    if (test.try_lock())
    {
        std::cout << "lock acquired\n";
        test.unlock();
    }
    else
        std::cout << "lock not acquired\n";
    test.lock();
    // non-recursive mutex would return false from try_lock now
    if (test.try_lock())
    {
        std::cout << "lock acquired\n";
        test.unlock(); 
    }
    else
        std::cout << "lock not acquired\n";
    test.unlock();
}

출력:

lock acquired
lock acquired

참고 항목

뮤텍스를 잠금, 뮤텍스를 사용할 수 없는 경우 차단됨
(public member function)
뮤텍스를 잠금 해제
(public member function)
C documentation for mtx_trylock