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

莱芜做网站建设的公司迅腾网络网站建设有限公司

莱芜做网站建设的公司,迅腾网络网站建设有限公司,网络软件,scala网站开发目录 一、互斥概念 二、互斥的使用函数 三、互斥的底层原理 一、互斥概念 互斥,全称是线程互斥,互斥是一套解决方案,用来保护临界资源。一般在多线程的代码中,要使用互斥这套解决方案来保护临界资源。 主要从代码的角度理解互斥…

目录

一、互斥概念

二、互斥的使用函数

三、互斥的底层原理


一、互斥概念

        互斥,全称是线程互斥,互斥是一套解决方案,用来保护临界资源。一般在多线程的代码中,要使用互斥这套解决方案来保护临界资源。

        主要从代码的角度理解互斥,下面的代码背景:多线程代码,有4个线程在其函数中访问了临界资源,现在用互斥来保护临界资源。

二、互斥的使用函数

man pthread_mutex_init

   

        pthread_mutex_t 等于定义一把互斥锁。定义互斥锁有两种情况,

  • 如果打算将互斥锁定义成全局或者静态的,则执行这条代码即可。

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

//1.定义全局互斥锁
pthread_mutex_t g_mutex= PTHREAD_MUTEX_INITIALIZER;
void route(ThreadData* td)
{while(1){pthread_mutex_lock(&g_mutex);if(td->_tick>0){usleep(1000);printf("%s running,can get only tick:%d\n",td->_name.c_str(),td->_tick);td->_tick--;pthread_mutex_unlock(&g_mutex);td->_total++;}else{pthread_mutex_unlock(&g_mutex);break;}}}
  • 如果打算将互斥锁定义在局部,则需要使用相关接口初始化和销毁。

  • 更优雅的做法,把上锁和解锁做封装,交给类来做。

//3.RAII风格的加锁、解锁
void route(ThreadData* td)
{while(1){//在循环内创建一个类 临时对象,出循环销毁,调用析构函数,同时解锁Lock lock(&td->_mutex);if(td->_tick>0){usleep(1000);printf("%s running,can get only tick:%d\n",td->_name.c_str(),td->_tick);td->_tick--;td->_total++;}else{break;}}
}

三、互斥的底层原理

  • 为什么互斥锁能解决共享资源被多个线程访问的问题。

1.多线程本质是在并行运行程序,临界资源即共享资源,临界区即访问临界资源的代码,而保护共享资源,其实就是想办法在把临界区的代码变成多线程在串行访问

2.专业来说,就是要求,临界区的代码要具备原子性,即要么还没开始做,要么已经完成。

3.在cpu执行代码的角度来看,要求临界区代码转成汇编后,只需一个时钟周期即可完成。

4.显然,临界区的代码,不可能只是一句汇编。

5.因此,有了互斥锁的设计,只需保证申请锁的过程是原子性的即可,让其他线程卡在申请锁这个语句即可。

  • 底层汇编

        

        上锁的过程,在转成汇编语句后,就是上面这几句汇编语言,其中最重要的一句就是xchgb语句,这个语句就是原子的,交换寄存器和内存中的值,而内存中的这个值代表着锁,寄存器的值却是0。

        这个过程其实是这样的:内存中定义锁后,线程1执行xchgb后,意味着线程1申请到了锁,也意味着线程1 把临界资源上了锁,此时如果发生线程切换,线程2执行xchgb后,因为内存中已经没有了锁这个资源,所以后面的条件语句线程2也就无法执行。

        这就是互斥锁的最底层实现原理。

http://www.dtcms.com/wzjs/561481.html

相关文章:

  • 网站自助建站系统营销型网站建设方案
  • 为什么网站之有首页被收录山西企业建站系统平台
  • 唐山百度网站建设wordpress英文主题改成中文版
  • 站长工具ip地址查询江苏省执业建设注册中心网站
  • 红安建设局网站新建文档怎么做网站
  • 中山网站建设制作 超凡科技合肥网络公司哪个最好
  • 贵阳网站设计网站手机网站怎么建立
  • 美食网站建设内容规划江苏网站建设官网
  • 怎么做网站解析建网站学什么软件
  • 网站技术可行性企业介绍微网站怎么做
  • 滨湖区知名做网站价格只做二手奢侈品的网站
  • 建立网站的英文短语怎么做网站然后卖出去
  • 如何找企业联系做网站WordPress插件集成到主题
  • 基于asp.net网站开发视频教程推荐网站建设的书
  • dw是什么软件安阳网站建设推广优化
  • 企业网站建设的建议湛江网站制作工具
  • 呼和浩特重大消息aso优化推广公司
  • 网站的功能和作用项目驱动式网页设计与制作教程
  • 厨具 技术支持东莞网站建设用discuz做的门户网站
  • 推广展示类网站用我在线网站建设
  • 北京哪有建网站公司或个人的产品开发流程梳理
  • 我的企业网站怎么seo建设网站的市场背景
  • 手机微信网站链接qq是谁开发的
  • 深圳创新网站建设软件开发平台介绍
  • 建设网站的意义网页设计教育培训
  • 东莞建设网站综合服务平台三亚百度推广开户
  • 珠海网站建设外包wordpress本地服务器
  • 一个公司如何做多个网站备案长春百度网站排名优化
  • 咸阳网站建设培训管理系统软件
  • 做网站用的编程语言靖江seo收费贵吗