当前位置: 首页 > news >正文

网站外链工具为什么有的网页打不开怎么解决

网站外链工具,为什么有的网页打不开怎么解决,萝岗电子商务网站建设,网店怎么开啊流程是怎么视频教程代码 代码的名称是read_write_mutex.h这个代码可用#xff0c;但是未优化#xff0c;还存在冗余的代码如果涉及到进程挂掉了#xff0c;造成进程堵塞#xff0c;如何解决#xff1f;还未涉及 //#ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP #define BOOST_THREAD_PTHR…代码 代码的名称是read_write_mutex.h这个代码可用但是未优化还存在冗余的代码如果涉及到进程挂掉了造成进程堵塞如何解决还未涉及 //#ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP #define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP// (C) Copyright 2006-8 Anthony Williams // (C) Copyright 2012 Vicente J. Botet Escriba // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt)#include boost/assert.hpp #include boost/static_assert.hpp #include boost/thread/mutex.hpp #include boost/thread/condition_variable.hpp #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS #include boost/thread/detail/thread_interruption.hpp #endif #ifdef BOOST_THREAD_USES_CHRONO #include boost/chrono/system_clocks.hpp #include boost/chrono/ceil.hpp #endif #include boost/thread/detail/delete.hpp #include boost/assert.hpp#include boost/config/abi_prefix.hpp #include boost/interprocess/sync/named_mutex.hpp #include boost/interprocess/sync/named_condition.hppnamespace bip boost::interprocess; namespace chy {class shared_mutex{private:class state_data{public:state_data () :shared_count(0),exclusive(false),upgrade(false),exclusive_waiting_blocked(false){}void assert_free() const{BOOST_ASSERT( ! exclusive );BOOST_ASSERT( ! upgrade );BOOST_ASSERT( shared_count0 );}void assert_locked() const{BOOST_ASSERT( exclusive );BOOST_ASSERT( shared_count0 );BOOST_ASSERT( ! upgrade );}void assert_lock_shared () const{BOOST_ASSERT( ! exclusive );BOOST_ASSERT( shared_count0 );//BOOST_ASSERT( (! upgrade) || (shared_count1));// if upgraded there are at least 2 threads sharing the mutex,// except when unlock_upgrade_and_lock has decreased the number of readers but has not taken yet exclusive ownership.}void assert_lock_upgraded () const{BOOST_ASSERT( ! exclusive );BOOST_ASSERT( upgrade );BOOST_ASSERT( shared_count0 );}void assert_lock_not_upgraded () const{BOOST_ASSERT( ! upgrade );}bool can_lock () const{return ! (shared_count || exclusive);}void exclusive_blocked (bool blocked){exclusive_waiting_blocked blocked;}void lock (){exclusive true;}void unlock (){exclusive false;exclusive_waiting_blocked false;}bool can_lock_shared () const{return ! (exclusive || exclusive_waiting_blocked);}bool more_shared () const{return shared_count 0 ;}unsigned get_shared_count () const{return shared_count ;}unsigned lock_shared (){return shared_count;}void unlock_shared (){--shared_count;}bool unlock_shared_downgrades(){if (upgrade) {upgradefalse;exclusivetrue;return true;} else {exclusive_waiting_blockedfalse;return false;}}void lock_upgrade (){shared_count;upgradetrue;}bool can_lock_upgrade () const{return ! (exclusive || exclusive_waiting_blocked || upgrade);}void unlock_upgrade (){upgradefalse;--shared_count;}//private:unsigned shared_count;bool exclusive;bool upgrade;bool exclusive_waiting_blocked;};state_data state; // boost::mutex state_change;bip::named_mutex state_change{bip::open_or_create,mutex}; // boost::condition_variable shared_cond;bip::named_condition shared_cond{bip::open_or_create,read}; // boost::condition_variable exclusive_cond;bip::named_condition exclusive_cond{bip::open_or_create,write};boost::condition_variable upgrade_cond;void release_waiters(){exclusive_cond.notify_one();shared_cond.notify_all();}public:BOOST_THREAD_NO_COPYABLE(shared_mutex)shared_mutex(){}~shared_mutex(){}void lock_shared(){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change); // boost::unique_lockbip::named_mutexlk(state_change);boost::unique_lockbip::named_mutex lk(state_change);while(!state.can_lock_shared()){shared_cond.wait(lk);}state.lock_shared();}bool try_lock_shared(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);if(!state.can_lock_shared()){return false;}state.lock_shared();return true;}//#if defined BOOST_THREAD_USES_DATETIME // bool timed_lock_shared(boost::system_time const timeout) // { //#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS // boost::this_thread::disable_interruption do_not_disturb; //#endifboost::unique_lockboost::mutex lk(state_change); // boost::unique_lockbip::named_mutexlk(state_change); // // while(!state.can_lock_shared()) // { // if(!shared_cond.timed_wait(lk,timeout)) // { // return false; // } // } // state.lock_shared(); // return true; // }// templatetypename TimeDuration // bool timed_lock_shared(TimeDuration const relative_time) // { // return timed_lock_shared(boost::get_system_time()relative_time); // } //#endif #ifdef BOOST_THREAD_USES_CHRONOtemplate class Rep, class Periodbool try_lock_shared_for(const boost::chrono::durationRep, Period rel_time){return try_lock_shared_until(boost::chrono::steady_clock::now() rel_time);}template class Clock, class Durationbool try_lock_shared_until(const boost::chrono::time_pointClock, Duration abs_time){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);while(!state.can_lock_shared())//while(state.exclusive || state.exclusive_waiting_blocked){ // if(boost::cv_status::timeoutshared_cond.wait_until(lk,abs_time)) // { // return false; // }}state.lock_shared();return true;} #endifvoid unlock_shared(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_lock_shared();state.unlock_shared();if (! state.more_shared()){if (state.upgrade){// As there is a thread doing a unlock_upgrade_and_lock that is waiting for ! state.more_shared()// avoid other threads to lock, lock_upgrade or lock_shared, so only this thread is notified.state.upgradefalse;state.exclusivetrue;//lk.unlock();upgrade_cond.notify_one();}else{state.exclusive_waiting_blockedfalse;//lk.unlock();}release_waiters();}}void lock(){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);while (state.shared_count || state.exclusive){state.exclusive_waiting_blockedtrue;exclusive_cond.wait(lk);}state.exclusivetrue;}#if defined BOOST_THREAD_USES_DATETIMEbool timed_lock(boost::system_time const timeout){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);while(state.shared_count || state.exclusive){state.exclusive_waiting_blockedtrue;if(!exclusive_cond.timed_wait(lk,timeout)){if(state.shared_count || state.exclusive){state.exclusive_waiting_blockedfalse;release_waiters();return false;}break;}}state.exclusivetrue;return true;}templatetypename TimeDurationbool timed_lock(TimeDuration const relative_time){return timed_lock(boost::get_system_time()relative_time);} #endif #ifdef BOOST_THREAD_USES_CHRONOtemplate class Rep, class Periodbool try_lock_for(const boost::chrono::durationRep, Period rel_time){return try_lock_until(boost::chrono::steady_clock::now() rel_time);}template class Clock, class Durationbool try_lock_until(const boost::chrono::time_pointClock, Duration abs_time){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);while(state.shared_count || state.exclusive){state.exclusive_waiting_blockedtrue; // if(boost::cv_status::timeout exclusive_cond.wait_until(lk,abs_time)) // { // if(state.shared_count || state.exclusive) // { // state.exclusive_waiting_blockedfalse; // release_waiters(); // return false; // } // break; // }}state.exclusivetrue;return true;} #endifbool try_lock(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);if(state.shared_count || state.exclusive){return false;}else{state.exclusivetrue;return true;}}void unlock(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_locked();state.exclusivefalse;state.exclusive_waiting_blockedfalse;state.assert_free();release_waiters();}void lock_upgrade(){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade){shared_cond.wait(lk);}state.lock_shared();state.upgradetrue;}#if defined BOOST_THREAD_USES_DATETIMEbool timed_lock_upgrade(boost::system_time const timeout){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade){if(!shared_cond.timed_wait(lk,timeout)){if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade){return false;}break;}}state.lock_shared();state.upgradetrue;return true;}templatetypename TimeDurationbool timed_lock_upgrade(TimeDuration const relative_time){return timed_lock_upgrade(boost::get_system_time()relative_time);} #endif #ifdef BOOST_THREAD_USES_CHRONOtemplate class Rep, class Periodbool try_lock_upgrade_for(const boost::chrono::durationRep, Period rel_time){return try_lock_upgrade_until(boost::chrono::steady_clock::now() rel_time);}template class Clock, class Durationbool try_lock_upgrade_until(const boost::chrono::time_pointClock, Duration abs_time){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade){ // if(boost::cv_status::timeout shared_cond.wait_until(lk,abs_time)) // { // if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) // { // return false; // } // break; // }}state.lock_shared();state.upgradetrue;return true;} #endifbool try_lock_upgrade(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade){return false;}else{state.lock_shared();state.upgradetrue;state.assert_lock_upgraded();return true;}}void unlock_upgrade(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);//state.upgradefalse;state.unlock_upgrade();if(! state.more_shared() ){state.exclusive_waiting_blockedfalse;release_waiters();} else {shared_cond.notify_all();}}// Upgrade - Exclusivevoid unlock_upgrade_and_lock(){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_lock_upgraded();state.unlock_shared(); // while (state.more_shared()) // { // upgrade_cond.wait(lk); // }state.upgradefalse;state.exclusivetrue;state.assert_locked();}void unlock_and_lock_upgrade(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_locked();state.exclusivefalse;state.upgradetrue;state.lock_shared();state.exclusive_waiting_blockedfalse;state.assert_lock_upgraded();release_waiters();}bool try_unlock_upgrade_and_lock(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_lock_upgraded();if( !state.exclusive !state.exclusive_waiting_blocked state.upgrade state.shared_count1){state.shared_count0;state.exclusivetrue;state.upgradefalse;state.assert_locked();return true;}return false;} #ifdef BOOST_THREAD_USES_CHRONOtemplate class Rep, class Periodbooltry_unlock_upgrade_and_lock_for(const boost::chrono::durationRep, Period rel_time){return try_unlock_upgrade_and_lock_until(boost::chrono::steady_clock::now() rel_time);}template class Clock, class Durationbooltry_unlock_upgrade_and_lock_until(const boost::chrono::time_pointClock, Duration abs_time){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endif // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_lock_upgraded();if (state.shared_count ! 1){ // for (;;) // { // boost::cv_status status shared_cond.wait_until(lk,abs_time); // if (state.shared_count 1) // break; // if(status boost::cv_status::timeout) // return false; // }}state.upgradefalse;state.exclusivetrue;state.exclusive_waiting_blockedfalse;state.shared_count0;return true;} #endif// Shared - Exclusivevoid unlock_and_lock_shared(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_locked();state.exclusivefalse;state.lock_shared();state.exclusive_waiting_blockedfalse;release_waiters();}#ifdef BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONSbool try_unlock_shared_and_lock(){boost::unique_lockboost::mutex lk(state_change);state.assert_lock_shared();if( !state.exclusive !state.exclusive_waiting_blocked !state.upgrade state.shared_count1){state.shared_count0;state.exclusivetrue;return true;}return false;} #ifdef BOOST_THREAD_USES_CHRONOtemplate class Rep, class Periodbooltry_unlock_shared_and_lock_for(const chrono::durationRep, Period rel_time){return try_unlock_shared_and_lock_until(chrono::steady_clock::now() rel_time);}template class Clock, class Durationbooltry_unlock_shared_and_lock_until(const chrono::time_pointClock, Duration abs_time){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endifboost::unique_lockboost::mutex lk(state_change);state.assert_lock_shared();if (state.shared_count ! 1){for (;;){cv_status status shared_cond.wait_until(lk,abs_time);if (state.shared_count 1)break;if(status cv_status::timeout)return false;}}state.upgradefalse;state.exclusivetrue;state.exclusive_waiting_blockedfalse;state.shared_count0;return true;} #endif #endif// Shared - Upgradevoid unlock_upgrade_and_lock_shared(){ // boost::unique_lockboost::mutex lk(state_change);boost::unique_lockbip::named_mutexlk(state_change);state.assert_lock_upgraded();state.upgradefalse;state.exclusive_waiting_blockedfalse;release_waiters();}#ifdef BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONSbool try_unlock_shared_and_lock_upgrade(){boost::unique_lockboost::mutex lk(state_change);state.assert_lock_shared();if( !state.exclusive !state.exclusive_waiting_blocked !state.upgrade){state.upgradetrue;return true;}return false;} #ifdef BOOST_THREAD_USES_CHRONOtemplate class Rep, class Periodbooltry_unlock_shared_and_lock_upgrade_for(const chrono::durationRep, Period rel_time){return try_unlock_shared_and_lock_upgrade_until(chrono::steady_clock::now() rel_time);}template class Clock, class Durationbooltry_unlock_shared_and_lock_upgrade_until(const chrono::time_pointClock, Duration abs_time){ #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONSboost::this_thread::disable_interruption do_not_disturb; #endifboost::unique_lockboost::mutex lk(state_change);state.assert_lock_shared();if( state.exclusive|| state.exclusive_waiting_blocked|| state.upgrade){for (;;){cv_status status exclusive_cond.wait_until(lk,abs_time);if( ! state.exclusive ! state.exclusive_waiting_blocked ! state.upgrade)break;if(status cv_status::timeout)return false;}}state.upgradetrue;return true;} #endif #endif};typedef shared_mutex upgrade_mutex; }#include boost/config/abi_suffix.hpp//#endif测试代码 #include boost/thread/thread.hpp #include boost/interprocess/sync/scoped_lock.hpp #include boost/interprocess/sync/named_mutex.hpp #include boost/ref.hpp#include read_write_mutex.h#include string #include mutexchy::shared_mutex global_mutex; int global_num 10;//全局变量写者改变全局变量读者读全局变量 namespace bip boost::interprocess; //bip::named_mutex global_mutex(bip::open_or_create,mtx);//读线程 void read_thread(std::string name){ // boost::lock_guardbip::named_mutex lock(global_mutex);//读锁定 // bip::named_mutex global_mutex(bip::open_or_create,mtx); // global_mutex.lock();boost::shared_lockchy::shared_mutex lock{global_mutex};printf(线程%s抢占了资源global_num %d\n,name.c_str(),global_num);boost::this_thread::sleep(boost::posix_time::seconds(1));printf(线程%s释放了资源...\n,name.c_str()); // global_mutex.unlock(); }//写线程 void write_thread(std::string name){ // std::lock_guardbip::named_mutex lock(global_mutex);//写锁定 // bip::named_mutex global_mutex(bip::open_or_create,mtx); // global_mutex.lock();boost::lock_guardchy::shared_mutex lock{global_mutex};global_num;//写线程改变数据的数值printf(线程%s抢占了资源global_num %d\n,name.c_str(),global_num);boost::this_thread::sleep(boost::posix_time::seconds(1));printf(线程%s释放了资源...\n,name.c_str()); // global_mutex.unlock(); }int main(){std::string read_thread_r1 read_thread_r1;std::string read_thread_r2 read_thread_r2;std::string read_thread_r3 read_thread_r3;std::string read_thread_r4 read_thread_r4;std::string read_thread_r5 read_thread_r5;std::string write_thread_w1 write_thread_w1;std::string write_thread_w2 write_thread_w2;boost::thread_group tg;tg.create_thread(boost::bind(read_thread,boost::ref(read_thread_r1)));tg.create_thread(boost::bind(read_thread,boost::ref(read_thread_r2)));tg.create_thread(boost::bind(read_thread,boost::ref(read_thread_r3)));tg.create_thread(boost::bind(read_thread,boost::ref(read_thread_r4)));tg.create_thread(boost::bind(read_thread,boost::ref(read_thread_r5)));tg.create_thread(boost::bind(write_thread,boost::ref(write_thread_w1)));tg.create_thread(boost::bind(write_thread,boost::ref(write_thread_w2)));tg.join_all();return 0; }
http://www.pierceye.com/news/175495/

相关文章:

  • 网站开发合作合同范本电子商务营销渠道有哪些
  • 云南网站建设哪个好沈阳视频制作公司
  • 可以做公众号的一些网站企业级网站开发需求分析
  • 建设网站收费标准品牌网络推广公司排名
  • 网站怎么做动态背景图片营销型网站建设的优势有哪些
  • 专业网站制作软件网页设计五个页面
  • 个人网站的成本球形网架结构厂家
  • 顺德网站制作案例价位php做视频网站源码
  • 网站优化 无需定金公明网站制作
  • 安徽龙山建设网站wordpress 禁止twitter
  • 中卫市网站开发制作网页设计html代码大全颜色
  • 深圳网站建设伪静态 报价 jsp 语言新网站如何推广
  • 南京建设局网站首页wordpress 要求ftp
  • 百度站长 添加网站哪些网站可以上传自己做的视频
  • 网站开发的论文引言微信网站开发视频教程
  • 宁波网站制作出售爱南宁app下载官网最新版
  • 科技类公司名称大全常州网站关键词优化咨询
  • 共享ip服务器做网站如何把网站推广出
  • 网站开发标书范本免费模板下载网站推荐
  • 郑州品牌网站建设宿松县住房和城乡建设局网站
  • 电商网站开发与运营赣州爆炸事故
  • 牡丹区建设局网站黄骅贴吧最近发生的事
  • 手机一键建站北京公司网站建站
  • 做个简单网站大概多少钱广州联亨科技网站建设
  • 恺策网优 营销型网站建设品牌服务商在线html网站开发
  • 做seo要明白网站桂林生活网新闻
  • 网站建设供需武昌做网站哪家专业
  • 好看的电商网站模板网易对象存储wordpress
  • 上海工商网查询企业信息查询系统安卓优化大师app下载
  • 深圳网站快速备案亳州做网站