std:: mutex
| 
 | 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
| Native handle | ||||
| 
           定义于头文件
            
            
             <mutex>
            
            | ||
| 
           
            
             class
            
            mutex
            
             ;
            
           
           | (C++11 起) | |
       
        mutex
       
       类是一种同步原语,可用于保护共享数据不被多个线程同时访问。
      
       
        mutex
       
       提供独占的、非递归的所有权语义:
      
- 
        调用线程从成功调用
        
         lock或try_lock开始,直到调用unlock期间,均 持有 该mutex。
- 
        当某线程持有一个
        mutex时,其他所有线程若试图获取该mutex的所有权,将会被阻塞(针对lock的调用)或收到 false 返回值(针对try_lock)。
- 
        调用线程在调用
        
         lock或try_lock前不得已持有该mutex。
       若
       
        mutex
       
       在被任何线程持有时被销毁,或线程在持有
       
        mutex
       
       时终止,则程序行为未定义。
       
        mutex
       
       类满足
       
        
         Mutex
        
       
       与
       
        
         StandardLayoutType
        
       
       的所有要求。
      
       
        std::mutex
       
       既不可复制也不可移动。
      
| 目录 | 
嵌套类型
| 名称 | 定义 | 
| 
          native_handle_type
         (
          
           可选*
          
          ) | 由实现定义 | 
成员函数
| 构造互斥锁 (公开成员函数) | |
| 销毁互斥锁 (公开成员函数) | |
| 
           
            
             operator=
            
           
           
           
            
             
              [deleted]
             
            
           
           | 不可复制赋值 (公开成员函数) | 
| 加锁操作 | |
| 锁定互斥锁,若互斥锁不可用则阻塞 (公开成员函数) | |
| 尝试锁定互斥锁,若互斥锁不可用则立即返回 (公开成员函数) | |
| 解锁互斥锁 (公开成员函数) | |
| 原生句柄 | |
| 返回底层实现定义的原生句柄对象 (公开成员函数) | |
注释
       
        std::mutex
       
       通常不直接访问:
       
        
         std::unique_lock
        
       
       、
       
        
         std::lock_guard
        
       
       、
       
        
         或
         
          
           std::scoped_lock
          
         
        
        
         
          (C++17 起)
         
        
       
       以更异常安全的方式管理锁定。
      
示例
        本示例展示了如何使用
        
         mutex
        
        来保护两个线程间共享的
        
         
          std::map
         
        
        。
       
#include <chrono> #include <iostream> #include <map> #include <mutex> #include <string> #include <thread> std::map<std::string, std::string> g_pages; std::mutex g_pages_mutex; void save_page(const std::string& url) { // 模拟一个耗时的页面获取过程 std::this_thread::sleep_for(std::chrono::seconds(2)); std::string result = "fake content"; std::lock_guard<std::mutex> guard(g_pages_mutex); g_pages[url] = result; } int main() { std::thread t1(save_page, "http://foo"); std::thread t2(save_page, "http://bar"); t1.join(); t2.join(); // 现在可以安全地访问 g_pages,因为线程已执行完毕 for (const auto& [url, page] : g_pages) std::cout << url << " => " << page << '\n'; }
输出:
http://bar => fake content http://foo => fake content
参见
| 
           
            
             
              (C++11)
             
            
           
           | 提供可由同一线程递归锁定的互斥设施 (类) | 
| 
           
            
             
              (C++11)
             
            
           
           | 实现严格基于作用域的互斥所有权包装器 (类模板) | 
| 
           
            
             
              (C++11)
             
            
           
           | 实现可移动的互斥所有权包装器 (类模板) | 
| 
           
            
             
              (C++17)
             
            
           
           | 避免死锁的多互斥体RAII包装器 (类模板) | 
| 
           
            
             
              (C++11)
             
            
           
           | 提供与
         
          
           std::unique_lock
          
         
         关联的条件变量 (类) |