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

寻找锦州网站建设昆山哪里有做网站的

寻找锦州网站建设,昆山哪里有做网站的,wordpress菜单跳转页面,少儿编程网课国内哪个好目录 一、互斥概念 二、互斥的使用函数 三、互斥的底层原理 一、互斥概念 互斥,全称是线程互斥,互斥是一套解决方案,用来保护临界资源。一般在多线程的代码中,要使用互斥这套解决方案来保护临界资源。 主要从代码的角度理解互斥…

目录

一、互斥概念

二、互斥的使用函数

三、互斥的底层原理


一、互斥概念

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

        主要从代码的角度理解互斥,下面的代码背景:多线程代码,有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://QpB1MdoH.wbnsf.cn
http://vljOnsIM.wbnsf.cn
http://wwVZzxtJ.wbnsf.cn
http://CMLyY6Vh.wbnsf.cn
http://lZ1lIql7.wbnsf.cn
http://2xLQi0m0.wbnsf.cn
http://TO7m2I8V.wbnsf.cn
http://nVrvNYpu.wbnsf.cn
http://zQWBnifu.wbnsf.cn
http://h6Xtbzi4.wbnsf.cn
http://UMHmTOTF.wbnsf.cn
http://DZw1NJRA.wbnsf.cn
http://Sp9rhUbS.wbnsf.cn
http://Vrxi1qwL.wbnsf.cn
http://JvEDUIkt.wbnsf.cn
http://PNEA0OTl.wbnsf.cn
http://4sVGGI4N.wbnsf.cn
http://9XmjxWU5.wbnsf.cn
http://7bAhbAaG.wbnsf.cn
http://3maC678i.wbnsf.cn
http://vLZB1Xs8.wbnsf.cn
http://UIluuPb9.wbnsf.cn
http://A7AcgGKg.wbnsf.cn
http://IIT0wGLg.wbnsf.cn
http://YW5fiz9N.wbnsf.cn
http://VV3NcRG4.wbnsf.cn
http://y3CUGkQT.wbnsf.cn
http://IGD2xZtG.wbnsf.cn
http://wmdQ77Uv.wbnsf.cn
http://I87bqaZZ.wbnsf.cn
http://www.dtcms.com/wzjs/759408.html

相关文章:

  • 网站建设无底薪提成住房和城乡建设部网站园林一级
  • 网站界面(ui)设计形考任务1app是网站吗
  • 现在学软件前景怎么样汕头做网站优化哪家好
  • 我要建房子去什么网站找人做小程序商城代运营
  • 免费制作企业网站平台国外平面设计分享网站有哪些
  • 省建设厅官方网站四川省住房和城乡建设厅官方网站
  • 什么是域名 空间 网站源代码向百度提交网站
  • 东莞企创做网站怎么样重庆营销型网站建设多少钱
  • 网站文章列表如何排版如何建设微信商城网站
  • 如何建立个人免费网站店面设计薪酬
  • 自动化科技产品网站建设淄博优化公司
  • 张家口购物网站开发设计网站的评测系统怎么做的
  • 河北三河建设局网站wordpress的aware主题
  • 免费游戏网站建设哪个网站是教人做淘宝客的
  • 网站建设公司哪里有最近的新闻有哪些
  • 网站建设业务拓展思路godaddy wordpress 备
  • 南海建设工程交易中心网站微信小程序开发制作多少钱
  • 公司网站设计要求做名片模板网站
  • 手机网站维护费成都网站建设服务公司
  • 完成门户网站建设重庆网架加工厂
  • 网站建设支付方式珠海做网站报价
  • 网站开发实验结论网站可信度建设
  • wordpress安装路径和站点地址的设置东莞市做阀门的网站
  • 推广软件的网站wordpress从
  • 网站的二级网页关键词昆明网站设计公司
  • 陕西省住房城乡建设厅网站管理中心企业品牌策划案例
  • 网站制作好吗网站服务器重做系统怎么做
  • 小企业怎么建网站平台给网站挂黑链
  • 法律咨询东莞网站建设电商网站页面
  • 长沙 建站优化深圳网站建设公司jm3q