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_guard
是 std::unique_lock
和 std::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;
};