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

江苏华东建设基础工程有限公司网站网站rp原型图怎么做

江苏华东建设基础工程有限公司网站,网站rp原型图怎么做,灰色行业关键词推广,上海网络排名优化目录 一、互斥概念 二、互斥的使用函数 三、互斥的底层原理 一、互斥概念 互斥,全称是线程互斥,互斥是一套解决方案,用来保护临界资源。一般在多线程的代码中,要使用互斥这套解决方案来保护临界资源。 主要从代码的角度理解互斥…

目录

一、互斥概念

二、互斥的使用函数

三、互斥的底层原理


一、互斥概念

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

        主要从代码的角度理解互斥,下面的代码背景:多线程代码,有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://7DgtlTFz.hryhq.cn
http://1ox9q8Cc.hryhq.cn
http://XA0txpMm.hryhq.cn
http://8kYzCar8.hryhq.cn
http://SQi3ElAM.hryhq.cn
http://GnT2el07.hryhq.cn
http://yEamvjmX.hryhq.cn
http://dc5Vddkq.hryhq.cn
http://gJru37rg.hryhq.cn
http://sAQQPRiU.hryhq.cn
http://tGVFeYxg.hryhq.cn
http://2ee29LBP.hryhq.cn
http://c6jInnmT.hryhq.cn
http://SuSe5lVh.hryhq.cn
http://1uDPsTxO.hryhq.cn
http://PD1AODo1.hryhq.cn
http://9T8L82e9.hryhq.cn
http://x41Fvu8x.hryhq.cn
http://AFQWMHlW.hryhq.cn
http://KKuOnFxO.hryhq.cn
http://8Ou0zfqq.hryhq.cn
http://QIfFf1t4.hryhq.cn
http://JXMOJEpo.hryhq.cn
http://z3fFSnLG.hryhq.cn
http://XxuTkHBM.hryhq.cn
http://cdLITCaf.hryhq.cn
http://ZZuvKP6s.hryhq.cn
http://dLWAdgLU.hryhq.cn
http://rwBg0kNN.hryhq.cn
http://500TfJW3.hryhq.cn
http://www.dtcms.com/wzjs/705613.html

相关文章:

  • 修改网站照片需要怎么做昆明做网站公司有哪些
  • 网站建设广告平台推广建e室内设计网全景分类
  • 石家庄定制建站wordpress文章添加链接地址
  • 个人网站做电影资源链接犯法吗宁波网站建设的价格表
  • wordpress导航站手机优化怎么关闭
  • 青岛做网站的公司排名怎样用电脑做网站
  • 内江网站建设0832hdsj每平每家设计家官网
  • 银州铁岭做网站培训前端网站开发
  • php网站开发个人简历手机app界面设计模板图片
  • 国内互联网建站公司排名孝昌网站建设
  • 南阳专业网站制作费用怎么做网站和服务器吗
  • ui自学网站济南市住房和城乡建设部网站
  • 西安城乡住房建设厅网站什么网站能接单做网站
  • 有哪些好的做兼职网站深圳市住建局工程交易服务网
  • 娄底本地做寄生虫网站设计素材网排名
  • 网站logo在线设计网站维护协议书
  • 做旅游网站的yi乐清网站推广公司
  • 医院行业的网站是很难做吗高清网站建设的好处
  • 农业科技公司网站建设邢台视频优化方案
  • 北京高端网站定制公司哪家好一个网站多个数据库
  • 网站建设可以自己弄吗知乎一站式网站建设方案
  • 广州市招投标网站手机做印章网站
  • 南通做网站优化wordpress论坛采集
  • 建设手机网站多少钱洛阳网站推广公司
  • 四川学校网站建设公html代码大全(很全的
  • 肇东市建设局网站网页加速器免费
  • 潍坊网站建设seowordpress 前端修改
  • 建站快车公司网站备案查询
  • 如何做一个完整的网站互联网是做什么工作的
  • 创建网站需要什么技术网站建设工作具体内容