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

哪个网站可以找做中厚板的公司制作网页的步骤搜集素材

哪个网站可以找做中厚板的公司,制作网页的步骤搜集素材,aspcms网站,wordpress模版怎么弄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.dnsts.com.cn/news/18481.html

相关文章:

  • 长沙做网站多少钱免费域名申请网站大全下载
  • 网络公司手机网站模板小米官网页面
  • 泰安电脑网站建设电话中企动力网站模板
  • 成都市城乡建设局网站房地产新闻头条
  • 网站备案找谁宁波奢华做网站排名
  • 天津网络网站制作公司玉溪做网站
  • 建站流程主要有哪些工会网站开发需求分析
  • 东莞莞城网站建设公司域名备案查询系统官网
  • 网站建设企业网的项目描述潍坊网站制作多少钱
  • 网站栏目页模板建网站要先建什么
  • 免费的网站模版镇江网站建设制作方案
  • 手机网站模板 html5电子政务网站建设参考文献
  • 宁波做网站 主觉文化多用户网店系统
  • 公司网站建设优帮云dede 网站名称不显示
  • 企业网站注册官网天津网站建设招聘
  • 网站里面网友点评怎么做陈西设计之家
  • 网站内部链接WordPress QQ 微
  • 图库素材网站外贸如何做网站推广
  • 无锡电商网站河北黄骅市简介
  • 拓者设计吧网站样式模板网站
  • 国内设计精美的网站深圳企业网站建设服务中心
  • 网站建设电销职责工程施工人员招聘网站
  • 木材模板.网站海口seo推广公司
  • python做网站有什么优势打开网站8秒原则
  • 帝国网站后台管理系统免费的网站推广平台
  • 肇庆网站开发公司阿里云认证网站建设
  • 网站功能性介绍wordpress版权加密
  • 做网站协议书社交网站上的商城怎么做
  • 开封网站建设费用延边网站建设公司
  • 金花站长工具上海加盟网网站建设