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

网站登录和权限怎么做优设网app安卓下载

网站登录和权限怎么做,优设网app安卓下载,手机wap网站免费建站,张店网站制作哪家好1--死锁问题 死锁问题#xff1a;两个线程访问资源时加锁#xff0c;但都需要对方的资源才能执行释放锁#xff1b; 代码实例#xff1a;下面的代码中#xff0c;当线程 1 使用 my_mutex1 上锁后#xff0c;会继续使用 my_mutex2 进行上锁#xff0c;若此时线程 2 已经使…1--死锁问题 死锁问题两个线程访问资源时加锁但都需要对方的资源才能执行释放锁         代码实例下面的代码中当线程 1 使用 my_mutex1 上锁后会继续使用 my_mutex2 进行上锁若此时线程 2 已经使用 my_mutex2 上锁了也准备继续使用 my_mytex1 上锁这时就会出现死锁问题线程 1 掌握 my_mutex1 的资源需要使用 my_mutex2 的资源而线程 2 掌握 my_mutex2 的资源需要使用 my_mutex1 的资源两个线程都掌握各自需要的资源导致两个线程无法继续执行产生了死锁         一个简单的解决方案将两个线程的上锁顺序设计为相同 #include iostream #include thread #include list #include mutex // 引入互斥class myClass{ public:// 收集数据到消息队列void inMsgRecvQueue(){for(int i 0; i 100; i){// 模拟收集消息std::cout Running inMsgRecvQueue(), insert one value: i std::endl; my_mutex1.lock();my_mutex2.lock();msgRecvqueue.push_back(i); // 消息队列存储消息my_mutex2.unlock();my_mutex1.unlock();}}// 从消息队列取数据void outMsgRecvQueue(){for(int i 0; i 100; i){if(!msgRecvqueue.empty()){my_mutex2.lock(); // 加锁my_mutex1.lock(); // 加锁// 取出数据int command msgRecvqueue.front();msgRecvqueue.pop_front(); my_mutex1.unlock(); // 解锁my_mutex2.unlock(); // 解锁}else{std::cout Running outMsgRecvQueue(), the msgRecvqueue is empty std::endl;}}} private:std::listint msgRecvqueue; // 消息队列std::mutex my_mutex1; // 创建互斥量 std::mutex my_mutex2; // 创建互斥量 };int main(int argc, char *argv[]){myClass sample1;// 使用成员函数创建线程std::thread myInMsgObj(myClass::inMsgRecvQueue, sample1); // 收集数据线程std::thread myOutMsgObj(myClass::outMsgRecvQueue, sample1); // 取出数据线程myInMsgObj.join();myOutMsgObj.join();return 0; } 2--std::lock( )函数模板 std::lock() 可以锁住两个或两个以上的互斥量可以避免因为互斥量上锁顺序不同而导致的死锁问题         std::lock() 一般用于处理多个互斥量其要么将多个互斥量同时锁住要么将多个互斥量解锁当部分互斥量未上锁时要么等待其余互斥量上锁才继续执行要么释放已经锁住的互斥量         下面的实例代码使用 std::lock() 来解决上面的死锁问题 #include iostream #include thread #include list #include mutex // 引入互斥class myClass{ public:// 收集数据到消息队列void inMsgRecvQueue(){for(int i 0; i 100; i){// 模拟收集消息std::cout Running inMsgRecvQueue(), insert one value: i std::endl; std::lock(my_mutex1, my_mutex2);msgRecvqueue.push_back(i); // 消息队列存储消息my_mutex2.unlock();my_mutex1.unlock();}}// 从消息队列取数据void outMsgRecvQueue(){for(int i 0; i 100; i){if(!msgRecvqueue.empty()){std::lock(my_mutex1, my_mutex2);// 取出数据int command msgRecvqueue.front();msgRecvqueue.pop_front(); my_mutex1.unlock(); // 解锁my_mutex2.unlock(); // 解锁}else{std::cout Running outMsgRecvQueue(), the msgRecvqueue is empty std::endl;}}} private:std::listint msgRecvqueue; // 消息队列std::mutex my_mutex1; // 创建互斥量 std::mutex my_mutex2; // 创建互斥量 };int main(int argc, char *argv[]){myClass sample1;// 使用成员函数创建线程std::thread myInMsgObj(myClass::inMsgRecvQueue, sample1); // 收集数据线程std::thread myOutMsgObj(myClass::outMsgRecvQueue, sample1); // 取出数据线程myInMsgObj.join();myOutMsgObj.join();return 0; } 3--std::lock_guard( )函数模板 std::lock_guard( ) 可以替换 mutex.lock() 和 mutex.unlock()在项目复杂的时候可以避免遗漏上锁和解锁的问题         std::lock_guardstd::mutex 对象名(互斥量, std::adopt_lock); std::adopt_lock 的作用是表明互斥量在之前已经上锁了无需额外对互斥量进行上锁操作只需进行解锁操作即可 #include iostream #include thread #include list #include mutex // 引入互斥class myClass{ public:// 收集数据到消息队列void inMsgRecvQueue(){for(int i 0; i 100; i){// 模拟收集消息std::cout Running inMsgRecvQueue(), insert one value: i std::endl; std::lock(my_mutex1, my_mutex2);msgRecvqueue.push_back(i); // 消息队列存储消息std::lock_guardstd::mutex guard1(my_mutex1, std::adopt_lock);std::lock_guardstd::mutex guard2(my_mutex2, std::adopt_lock);}}// 从消息队列取数据void outMsgRecvQueue(){for(int i 0; i 100; i){if(!msgRecvqueue.empty()){std::lock(my_mutex1, my_mutex2);// 取出数据int command msgRecvqueue.front();msgRecvqueue.pop_front(); std::lock_guardstd::mutex guard1(my_mutex1, std::adopt_lock);std::lock_guardstd::mutex guard2(my_mutex2, std::adopt_lock);}else{std::cout Running outMsgRecvQueue(), the msgRecvqueue is empty std::endl;}}} private:std::listint msgRecvqueue; // 消息队列std::mutex my_mutex1; // 创建互斥量 std::mutex my_mutex2; // 创建互斥量 };int main(int argc, char *argv[]){myClass sample1;// 使用成员函数创建线程std::thread myInMsgObj(myClass::inMsgRecvQueue, sample1); // 收集数据线程std::thread myOutMsgObj(myClass::outMsgRecvQueue, sample1); // 取出数据线程myInMsgObj.join();myOutMsgObj.join();return 0; }
http://www.hkea.cn/news/14485484/

相关文章:

  • 做网站网站违法吗升级wordpress5.0
  • 买奢侈品去哪个网站有正品怎么做赛事直播网站
  • 网站服务是指小程序商城开源
  • 百度一般多久收录网站摄影网站怎么备案
  • 网站推广关键词工具wordpress 邮件推送
  • 金山网站建设推广天津全包圆装饰公司官网
  • 仿网站教程佛山专业网站开发公司
  • 做游戏陪玩网站南京专业网站设计哪个品牌
  • 网站精神文明建设专栏网站设计哪家强
  • 电脑什么软件做短视频网站wordpress换主题首页错乱
  • 网站树状结构图怎么做北京网页网站设计制作
  • 中山做app网站公司哪家好设计师专业网站
  • 长安网站优化广州学习做网站建设的学校
  • 做网站推广都有哪些行业长沙网站建设联系电话
  • 实惠的网站建设Wordpress页面添加小工具
  • 网站建设和网站推广可以同一家做吗在一个网站的各虚拟目录中默认文档的文件名要相同
  • win7 做服务器开网站asp网站开发招聘
  • 网站静态页网站建设柒金手指花总15
  • 做外贸需要关注的网站有什么好处西安域名注册
  • 盐城市城乡建设局网站教育培训栏目南庄建网站
  • 做本地团购网站建设物业公司网站
  • 泉州做网站优化网站开发经理招聘
  • 企业自建站案例lamp wordpress环境
  • 帝国网站如何做中英文切换软件开发和硬件开发哪个好
  • 周口建设企业网站公司做网站需要的手续
  • 网站建设功能图关键词优化精灵
  • 电子商务网站建设与完整实例wordpress momo
  • 怎么注销网站查备案网页开发软件有哪些
  • 中英文双语企业网站网站开发与设计实训报告总结
  • 站长工具seo综合查询降级集团公司网页设计