std::shared_timed_mutex:: lock
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Exclusive locking | ||||
|
shared_timed_mutex::lock
|
||||
| Shared locking | ||||
|
void
lock
(
)
;
|
(C++14 이후) | |
뮤텍스를 잠급니다. 다른 스레드가 이미 뮤텍스를 잠근 경우,
lock
호출은 잠금이 획득될 때까지 실행을 차단합니다.
만약
lock
이 이미
mutex
를 어떤 모드(공유 또는 배타적)로든 소유하고 있는 스레드에 의해 호출되면, 그 동작은 정의되지 않습니다.
동일한 뮤텍스에 대한 이전 unlock() 연산들은 이 연산과 동기화됩니다 ( std::memory_order 에 정의된 대로).
목차 |
예외
오류가 발생할 경우
std::system_error
를 발생시킵니다. 여기에는
lock
이 명세를 충족하는 것을 방해하는 기본 운영 체제의 오류도 포함됩니다. 예외가 발생한 경우 뮤텍스는 잠기지 않은 상태입니다.
참고 사항
lock()
는 일반적으로 직접 호출되지 않습니다:
std::unique_lock
,
std::scoped_lock
, 그리고
std::lock_guard
가 배타적 잠금 관리를 위해 사용됩니다.
공유 뮤텍스는 공유 모드에서 독점 소유권 모드로의 직접 전환을 지원하지 않습니다:
unlock_shared()
로 공유 잠금을 해제한 후에야
lock()
를 통해 독점 소유권을 획득할 수 있습니다.
boost::upgrade_mutex
를 이 목적으로 사용할 수 있습니다.
예제
이 예제는
lock
과
unlock
이 공유 데이터를 보호하는 데 어떻게 사용될 수 있는지 보여줍니다.
#include <chrono> #include <iostream> #include <mutex> #include <thread> int g_num = 0; // protected by g_num_mutex std::mutex g_num_mutex; void slow_increment(int id) { for (int i = 0; i < 3; ++i) { g_num_mutex.lock(); ++g_num; // note, that the mutex also syncronizes the output std::cout << "id: " << id << ", g_num: " << g_num << '\n'; g_num_mutex.unlock(); std::this_thread::sleep_for(std::chrono::milliseconds(234)); } } int main() { std::thread t1{slow_increment, 0}; std::thread t2{slow_increment, 1}; t1.join(); t2.join(); }
가능한 출력:
id: 0, g_num: 1 id: 1, g_num: 2 id: 1, g_num: 3 id: 0, g_num: 4 id: 0, g_num: 5 id: 1, g_num: 6
참고 항목
|
뮤텍스를 잠그려 시도하며, 뮤텍스를 사용할 수 없는 경우 반환합니다
(public member function) |
|
|
뮤텍스를 해제합니다
(public member function) |
|
|
C documentation
for
mtx_lock
|
|