stdunique lock stdshared lock stdlock guard

用於 RAII 樣式獲取 try 鎖,定時 try 鎖和遞迴鎖。

std::unique_lock 允許互斥鎖的獨佔所有權。

std::shared_lock 允許互斥鎖的共享所有權。幾個執行緒可以在 std::shared_mutex 上儲存 std::shared_locks。可從 C++ 14 獲得。

std::lock_guardstd::unique_lockstd::shared_lock 的輕量級替代品。

#include <unordered_map>
#include <mutex>
#include <shared_mutex>
#include <thread>
#include <string>
#include <iostream>

class PhoneBook {
public:
    std::string getPhoneNo( const std::string & name )
    {
        std::shared_lock<std::shared_timed_mutex> l(_protect);
        auto it =  _phonebook.find( name );
        if ( it != _phonebook.end() )
            return (*it).second;
        return "";
    }
    void addPhoneNo ( const std::string & name, const std::string & phone )
    {
        std::unique_lock<std::shared_timed_mutex> l(_protect);
        _phonebook[name] = phone;
    }
    
    std::shared_timed_mutex _protect;
    std::unordered_map<std::string,std::string>  _phonebook;
};