C++11 멀티스레드 - Mutex(1)
번호
이름
용도
일
std::mutex
가장 기본적이고 가장 자주 사용하는 상호 배척류
이
std::recursive_mutex
같은 스레드에서 귀속(재입)할 수 있는 상호 배척 클래스
삼
std::timed_mutex
mutex 기능 외에 시한부 요청 잠금 능력도 제공합니다
사
std::recursive_timed_mutex
같은 스레드에서 반복(재입력)할 수 있는timed_mutex
std::thread와 마찬가지로mutex 관련 클래스는 복사 구조를 지원하지 않으며 값을 부여하지 않습니다.이 동시에mutex류는move의 의미 (move구조,move부치) 를 지원하지 않습니다.이런 조작을 오용할 염려는 없다. 정말 이렇게 하려면 컴파일러가 너를 막을 것이다.
하나, lock,try_lock, unlock  
mutex의 표준 조작, 네 개의 mutex 클래스는 모두 이러한 조작을 지원하지만, 다른 클래스는 행위에 약간의 차이가 있다.
1.1 lock
  
상호 배척량을 잠그다.lock을 호출할 때 세 가지 상황이 있습니다.
1.2 try_lock
mutex를 잠그고 이 함수를 호출하는 것도 세 가지가 있습니다.
1.3 unlock
무텍스를 잠그고 무텍스에 대한 소유권을 해제합니다.특히 Recursive 시리즈mutex에 대해 unlock 횟수는 lock 횟수와 같아야 잠금을 완전히 풀 수 있습니다.다음은 무텍스의 작은 예를 보여 드리겠습니다.
#include 
#include 
#include 
void inc(std::mutex &mutex, int loop, int &counter) {
    for (int i = 0; i < loop; i++) {
        mutex.lock();
        ++counter;
        mutex.unlock();
    }
}
int main() {
    std::thread threads[5];
    std::mutex mutex;
    int counter = 0;
    for (std::thread &thr: threads) {
        thr = std::thread(inc, std::ref(mutex), 1000, std::ref(counter));
    }
    for (std::thread &thr: threads) {
        thr.join();
    }
    //  :5000, inc try_lock, <5000
    std::cout << counter << std::endl;
    return 0;
}
//: g++ -std=c++11 main.cpp
     둘,try_lock_for, try_lock_until  
이 두 함수는timed 시리즈의mutex(std::timed_mutex,std::recursive_timed_mutex)에만 사용되며, 함수는 지정된 시간을 기다릴 수 있으며, 자물쇠를 얻지 못하면false로 되돌아옵니다.시간 초과 설정을 제외하고 이 두 함수와try_lock 동작이 일치합니다.//  
template 
    try_lock_for(const chrono::duration& rel_time);
//  
template 
    try_lock_until(const chrono::time_point& abs_time);
    
  
try_lock_관련 코드#include 
#include 
#include 
#include 
void run500ms(std::timed_mutex &mutex) {
    auto _500ms = std::chrono::milliseconds(500);
    if (mutex.try_lock_for(_500ms)) {
        std::cout << " " << std::endl;
    } else {
        std::cout << " " << std::endl;
    }
}
int main() {
    std::timed_mutex mutex;
    mutex.lock();
    std::thread thread(run500ms, std::ref(mutex));
    thread.join();
    mutex.unlock();
    return 0;
}
// : 
    
  
기타
  
mutex 파일에 lock_guard, unique_lock,std::call_once, std::try_lock,std::lock(대량 잠금) 조작, 편폭 관계로 다음에 다시 이야기합시다.
이전 C++11 다중 스레드(간단하지만 간단하지 않음)
카탈로그
다음 C++11 다중 스레드 - Mutex(2)
                
                    
        
    
    
    
    
    
                
                
                
                
                
                
                    
                        
                            
                            
                                
                                    
                                    이 내용에 흥미가 있습니까?
                                
                            
                            
                            
                            현재 기사가 여러분의 문제를 해결하지 못하는 경우  AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
                            
                                
                                다양한 언어의 JSON
                            
                            JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
                            
                            
                            
                            
                            텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
                            
                        
                    
                
                
                
            
//  
template 
    try_lock_for(const chrono::duration& rel_time);
//  
template 
    try_lock_until(const chrono::time_point& abs_time);
    #include 
#include 
#include 
#include 
void run500ms(std::timed_mutex &mutex) {
    auto _500ms = std::chrono::milliseconds(500);
    if (mutex.try_lock_for(_500ms)) {
        std::cout << " " << std::endl;
    } else {
        std::cout << " " << std::endl;
    }
}
int main() {
    std::timed_mutex mutex;
    mutex.lock();
    std::thread thread(run500ms, std::ref(mutex));
    thread.join();
    mutex.unlock();
    return 0;
}
// : 
    이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.