彭二丫,顶悦视听盒,舒克贝塔历险记
例子:
#include <map> #include <string> #include <thread> #include <mutex> #include <functional> #include <boost/thread/shared_mutex.hpp> class dns_entry{ }; class dns_cache{ std::map<std::string, dns_entry> entries; mutable boost::shared_mutex entry_mutex; public: dns_entry find_entry(std::string const& domain)const{ boost::shared_lock<boost::shared_mutex> lk(entry_mutex); std::map<std::string, dns_entry>::const_iterator const it = entries.find(domain); return (it == entries.end()) ? dns_entry() : it->second; } void update_or_add_entry(std::string const& domain, dns_entry const& dns_details){ std::lock_guard<boost::shared_mutex> lk(entry_mutex); entries[domain] = dns_details; } }; int main(){ dns_entry de; dns_cache cache1, cache2, cache3; std::thread t(&dns_cache::find_entry, std::ref(cache3), "aaa"); t.join(); std::thread t1(&dns_cache::update_or_add_entry, std::ref(cache1), "aaa", de); t1.join(); std::thread t2(&dns_cache::find_entry, std::ref(cache2), "aaa"); t2.join(); }
编译方法:
g++ -g boost-shared-mutex.3.13.cpp -std=c++11 -l/home/ys/downloads/boost_1_68_0/stage/lib -lboost_thread -lboost_system -pthread
编译或者运行有问题的,请参考
std::thread t1(&dns_cache::update_or_add_entry, std::ref(cache1), "aaa", de);
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论