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

欧赛科技网站建设商务网站模板

欧赛科技网站建设,商务网站模板,网站 被黑,网站开发注意问题C11线程库 本质是对不同平台的线程库进行封装。因为windows和linux下各有自己的接口#xff0c;这使得代码的可移植性比较差。C11中最重要的特性就是对线程进行支持了#xff0c;使得C在并行编程时不需要依赖第三方库#xff0c;而且在原子操作中还引入了原子类的概念。要使…C11线程库 本质是对不同平台的线程库进行封装。因为windows和linux下各有自己的接口这使得代码的可移植性比较差。C11中最重要的特性就是对线程进行支持了使得C在并行编程时不需要依赖第三方库而且在原子操作中还引入了原子类的概念。要使用标准库中的线程必须包含thread头文件。 thread类 函数名功能thread()构造一个线程对象没有关联线程函数即没有启动任何线程thread(fn, args1, args2…)构造一个线程对象并关联线程函数fnargsx为线程函数的参数get_id()获取线程idjoinable()线程是否还在执行joinable表示的是一个正在执行中的线程join()主线程调用该函数后会阻塞等待另一个线程返回detach()在创建线程对象后马上调用用于把被创建线程与线程对象分离开分离的线程变为后台线程创建的线程的死活就与主线程无关 this_thread命名空间 get_id是需要对象去调用的函数当成成员函数不太好用故可写为std::this_thread::get_id()直接调用。this_thread是个命名空间用于访问当前进程的属性。 默认构造函数 比如要创建一个线程池但不清楚要创建多少个线程就可以用thread()函数。 int n 10;//线程个数 int m 10;//每个线程跑m次 vectorthread v_t;//创建n个线程对象但每个线程都是空的 v.resize(n);//会调用线程的默认构造函数 for (auto t : v_t) {t thread([m]{for (size_t i 0; i m; i){cout std::this_thread::get_id() 跑 endl;}}); }for (auto t : v_t) {t.join(); }初始化线程 线程函数一般情况下可按照以下三种方式提供函数指针lambda表达式函数对象。 线程函数的参数是以值拷贝的方式拷贝到线程独立栈空间中的因此即使线程参数为引用类型在线程中修改后也不能修改外部实参因为其实际引用的是线程栈中的拷贝而不是外部实参。 拷贝构造函数delete thread类是防拷贝的不允许拷贝构造以及赋值但是可以移动构造和移动赋值就是将一个线程对象关联线程的状态转移给其他线程对象转移期间不影响线程的执行。 可以通过joinable()函数判断线程是否是有效的如果是以下任意情况则线程无效采用无参构造函数构造的线程对象线程对象的状态已经转移给其他线程对象线程已经调用join或者detach结束。 注意2个线程同时对一个变量int n 0;进行操作时假设每个线程循环100次只有可能小于期望数200不可能大于期望数200。且当循环次数越大时错误越明显。 int val 0; mutex mtx; void fun(int num) {for (int i 0; i num; i){val;} } int main() {//两个线程可以调用同一个函数的原因因为该函数是共享的fun函数编译好以后是放在在主线程的代码段里两个从线程都可以调用thread t1(fun, 100);thread t2(fun, 100);t1.join();t2.join();cout val;//结果val200return 0; }注意fun里的加锁位置放在for循环外面就是串行执行了不过一个线程一旦申请成功知道循环结束后才会释放锁一个线程只需要一次加锁和解锁放在for循环里面会导致频繁地切换上下文加锁和解锁的次数跟循环次数相同了增加了系统消耗。 使fun()函数线程安全的3种方法 //---------放在for循环外----------//运行速度快 void fun(int num) {mtx.lock();for (int i 0; i num; i){val;}mtx.unlock(); } //---------放在for循环里----------//运行速度更慢 void fun(int num) { for (int i 0; i num; i){mtx.lock();val;mtx.unlock();} } //---------让变成原子操作----------// #include atomic atomic_int val{ 0 }; void fun(int num) {for (int i 0; i num; i){val;} }原子性操作库 底层是靠CAScompare and swap来解决windows和linux底层都有CAS。CAS操作包含3个操作数1、内存位置V2、预期原值A3、新值B。若内存位置的值与预期原值匹配那么处理器会自动将该位置更新为新值否则处理器不做任何处理。现在几乎所有的CPU指令都支持CAS的原子操作。 在C11中若提前声明该变量为原子性的那么程序员不需要对原子类型变量进行加锁解锁操作线程就能够对原子类型变量互斥访问。更方便的是程序员可以使用atomic类模板定义出需要的任意原子类型。 atomicT t; // 声明一个类型为T的原子类型变量t //atomic_int val{ 0 }; //atomicint val 0;注意原子类型通常属于资源型数据多个线程只能访问单个原子类型的拷贝因此在C11中原子类型只能从其模板参数中进行构造不允许原子类型进行拷贝构造、移动构造以及operator等为了防止意外标准库已经将atmoic模板类中的拷贝构造、移动构造、赋值运算符重载默认删除掉了。 mutex互斥锁 std::recursive_mutex递归里不可以用普通互斥锁。有专门的递归互斥锁recursive_mutex实现原理是根据线程id判断该线程是否已经加锁已加锁则不执行未加锁就加锁。 std::timed_mutex比 std::mutex 多了两个成员函数try_lock_for()【接受一个时间范围表示在这一段时间范围之内线程如果没有获得锁则被阻塞住在时间范围内还是没有获得锁返回 false否则该线程可以获得对互斥量的锁】try_lock_until() 【接受一个时间点作为参数在指定时间内还是没有获得锁返回 false否则该线程可以获得对互斥量的锁】。 lock_gurad RAII。以独占所有权的方式管理mutex对象的上锁和解锁操作即其对象之间不能发生拷贝。 实例化一个lock_guard对象调用构造函数则表示成功上锁出作用域前lock_guard对象要被销毁调用析构函数自动解锁。 lock_guard的缺陷太单一用户没有办法对该锁进行控制因此C11又提供了unique_lock。 C11 unique_lock RAII。以独占所有权的方式管理mutex对象的上锁和解锁操作即其对象之间不能发生拷贝。unique_lock更加的灵活。 上锁/解锁操作lock、try_lock、try_lock_for、try_lock_until和unlock修改操作移动赋值、交换(swap与另一个unique_lock对象互换所管理的互斥量所有权)、释放(release返回它所管理的互斥量对象的指针并释放所有权)获取属性owns_lock(返回当前对象是否上了锁)、operator bool()(与owns_lock()的功能相同)、mutex(返回当前unique_lock所管理的互斥量的指针) condition_variable wait需要搭配unique_lock使用pred一般传gelambda表达式 void wait (unique_lockmutex lck); //------------ template class Predicate void wait (unique_lockmutex lck, Predicate pred);相当于 while (!pred()) wait(lck);notify_one在linux里就是signalnotify_all对于broadcast。 面试题两个线程轮流打印奇数和偶数 面试题并发与并行的区别 并发Concurrent在操作系统中是指一个时间段中有几个程序都处于已启动运行到运行完毕之间且这几个程序都是在同一个处理机上运行。并行Parallel当系统有一个以上CPU时当一个CPU执行一个进程时另一个CPU可以执行另一个进程两个进程互不抢占CPU资源可以同时进行这种方式我们称之为并行(Parallel)。 并发和并行的区别并发指的是多个事情在同一时间段内同时发生了。并行指的是多个事情在同一时间点上同时发生了。并发的多个任务之间是互相抢占资源的。并行的多个任务之间是不互相抢占资源的、只有在多CPU的情况中才会发生并行。
http://www.hkea.cn/news/14275512/

相关文章:

  • 软件公司网站设计网站网格
  • 汉唐皓月网站推广方案上海外贸公司最新招聘
  • 大兴网站建设一条龙东莞最好的网站
  • 怎么把个人做的网站上传到网上官方网站建设需要哪个部门审批
  • 企业网站系统有哪些网架公司办公室规章制度范本
  • 网站查询工具ps制作网站首页界面
  • 宁德企业网站建设南通设计网站建设
  • 一条龙搭建网站高端网站的建设
  • 网站开发的技术问题虚拟主机销售网站源码
  • 海口模板建站哪家好wordpress all in one seo pack
  • 网站的动态新闻数据库怎么做石家庄智能模板建站
  • a站为什么不火了给城市建设提议献策的网站
  • 营销型网站建设一般包含哪些内容可以商用的图片网站
  • 杭州市建设监理协会网站外包网站设计
  • PHP网站新闻发布怎么做VM2008 做网站
  • 建站公司要不要承担网站被黑开源app开发工具
  • wordpress精美网站网站百度收录很多
  • 用dw做旅游的网站的设计做电器推广的网站
  • 做网站哪家最好公司网站在百度搜不到
  • 无锡建站模板系统app制作开发公司收费
  • 网站备案咨询页面设计尺寸规范
  • 数据管理网站模板网站制作需要哪些软件
  • 嵩明建设局网站东莞网络推广
  • 网站做专题各大网站发布
  • 潍坊市建设一体化平台网站设计图片素材网站有哪些
  • 做网站设计可以参照别人的么做网站多大
  • 交互 网站怎么在百度上制作自己的网站
  • 和县网站定制做网站公司济南
  • 制作一个企业网站过程建设银行E路航如何自动进入网站
  • 福州企业网站维护哪一个网站可以做任务拿佣金