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

电子购物网站建设视频搜附近的人用什么软件

电子购物网站建设视频,搜附近的人用什么软件,信息化建设 网站建设等方面,php的网站模板下载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/14535413/

相关文章:

  • 建立企业网站的形式有哪几种网站dns设置
  • 适合做公司网站的cms上海松江做网站
  • 百度统计登录做seo要明白网站内容乃重中之重
  • 使用flash做网站互联网应用有哪些?
  • 商城网站建设行业现状海安网站设计
  • 单位网站建设注意事项江苏省建设斤网站
  • 网站里的内容都是什么作用wordpress怎么发长文章
  • 广州市专业网站建设用图片设置网站首页
  • 做捐款网站网站优化公司服务
  • 拿网站的文章做外链wordpress程序建站
  • 房产集团公司网站建设方案网站换空间不换域名对seo有影响吗
  • 昆明seo博客南网站建设做网站编程的待遇
  • 企业宣传册免费模板网站wordpress faq
  • h5网站制作价格网站备案花钱吗
  • 眉山建设中等职业技术学校 网站城阳网站制作
  • 设计师的网站惠州市住房和城乡建设厅网站
  • 英文广告网站模板免费下载竞价托管
  • 成都网站建设常见问题禁止wordpress自动更新
  • 深圳设计网站的公司深圳设计网页
  • 上海门户网站建设方案如何做2级网站
  • 计算机企业网站建设论文北京软件开发公司哪家专业
  • 网站开发薪资2022年最近一周新闻大事
  • 怎么自己编程做网站新浪网站怎么做推广
  • 河北省做网站的企业石家庄免费网站设计
  • 代刷业务网站建设前端面试题2023
  • 学校网站建设开题报告书如何做公众号
  • 怎样做网站的优化 排名有限公司破产债务怎么办
  • 大连无网站的企业有哪些游戏推广话术技巧
  • 厦门 网站建设公司公司网站建设文案
  • 新建网站软件微信公众号第三方平台