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

中国室内设计网站排名推广公司简介

中国室内设计网站排名,推广公司简介,土建工程承包施工队,怎样建设网站最好信号量 除了临界点机制、互斥量机制可实现临界资源的互斥访问外,信号量(Semaphore)是另一选择。 信号量与互斥量的区别 对于互斥量来说,主要应用于临界资源的互斥访问,并且能够有效地避免优先级反转问题。对于信号量…

信号量

除了临界点机制、互斥量机制可实现临界资源的互斥访问外,信号量(Semaphore)是另一选择。

信号量与互斥量的区别

  • 对于互斥量来说,主要应用于临界资源的互斥访问,并且能够有效地避免优先级反转问题。
  • 对于信号量而言,它虽然也能用于临界资源的互斥访问,但是不能处理优先级反转问题。

也正因为信号量没有考虑优先级反转问题,所以相对于互斥量来说是一种轻量级的实现方式,比互斥量耗费更少的CPU资源。
此外,信号量除了用于互斥,还可以用于处理不同线程之间的同步问题,而互斥量却不行。

针对上述情况,有三种类型的信号量,按照功能来分,可以分为线程对临界资源互斥访问的互斥信号量、用于线程间同步的信号量、控制系统中临界资源的多个实例使用的计数信号量。

用于同步的信号量其初始值在创建信号量时设置为0,表示同步事件尚未发生。
临界资源互斥的信号量初始值为1,表明当前没有任务获取该信号量。
用于控制系统中临界资源的多个实例使用的计数信号量其初始值为n,表明需要管理的实例个数最大数为n,这样的信号量也称为计数信号量。

以下例子,通过一个计数信号量和互斥信号量实现对一个有界缓冲使用的控制,这就是“生产者与消费者”问题。

  • 计数信号量FULL表示已经被填充了的数据项目。
  • 计数信号量EMPTY表示空闲数据项数目。
    以上的取值范围均为(0,n-1),其初始值分别为0,n-1。
    由于有界缓冲区是共享资源,还需要一个互斥信号量MUTEX控制生产者线程与消费者线程对它的互斥访问,其初始值为1。

创建信号量

acoral_evt_t *acoral_sem_create(unsigned int semNum)
{acoral_evt_t *evt;evt = acoral_alloc_evt();if (NULL == evt){return NULL;}semNum = 1 - semNum;evt->count = semNum;evt->type = ACORAL_EVENT_SEM;evt->data = NULL;acoral_evt_init(evt);return evt;
}

初始化信号量。当静态定义信号量而不是采用指针形式定义时,内存空间已经在定义时分配,此时应当调用初始化函数acoral_sem_init()对定义过的信号量进行初始化。

aCoralSemRetValEnum acoral_sem_init(acoral_evt_t *evt,unsigned int semNum)
{if(NULL == evt){return SEM_ERR_NULL;}semNum = 1 - semNum;evt->count = semNum;evt->type = ACORAL_EVENT_SEM;evt->data = NULL;acoral_evt_init(evt);return SEM_SUCCED;
}

与互斥量初始化类似,就是为acoral_evt_t各个成员赋值。
这里需要提及的是count初始化,从传入的参数semNum可知,该变量用来表示当前信号量所控制的临界资源的实例的数量,但在具体实现时,并不是和大家想象的数字一样,如1代表有1个资源,2代表有2个资源…
在实现时,实例数量是用“1-semNum”来表示的,此时0代表有1个资源,-1代表有两个资源,1代表已经没有资源,且有1个线程在等待该资源实例。

申请信号量。申请信号量时需要传入两个参数:先前创建的信号量的地址,超时处理的时间。

acoralSemRetValEnum acoral_sem_pend(acoral_evt_t *evt, unsigned int timeout)
{acoral_thread_t *cur = acoral_cur_thread;if(acoral_intr_nesting){return SEM_ERR_INTR;}if(NULL == evt){return SEM_ERR_NULL;}if(ACORAL_EVENT_SEM != evt->type){return SEM_ERR_TYPE;}//计算信号量处理acoral_enter_critical();/*判断是否还有可用资源,从前面的介绍可知,这里的SEM_RES_AVAI其实就是0,如果count数目小于等于0,代表有资源实例。如果count大于0,代表在等待的有多少个线程。如果有可用的资源实例,让count的数目加一后退出,表示成功申请信号量。*/if((char)evt->count <= SEM_RES_AVAI){evt->count++;acoral_exit_critical();return SEM_SUCCED;}//如果无可用的资源实例,让count的数目加一后,再将自身挂起,重新调度线程evt->count++;acoral_unrdy_thread(cur);if(timeout > 0){cur->delay = TIME_TO_TICKS(timeout);timeout_queue_add(cur);}acoral_evt_queue_add(evt, cur);acoral_exit_critical();acoral_sched();acoral_enter_critical();//如果某个线程等待某个资源实例而又无法获取,它将被挂起,而若它希望被挂起的时间小于一个设定值timeout,还需将TCB的成员更新为timeout,并挂载到延迟队列中,如果延迟时间到,将进行相应处理if(timeout > 0 && cur->Delay <= 0){evt->count--;acoral_evt_queue_Del(cur);acoral_exit_critical();return SEM_ERR_TIMEOUT;}timeout_queue_del(cur);acoral_exit_critical();return SEM_SUCCED;
}

释放信号量

acoralSemRetValEnum acoral_sem_post(acoral_evt_t *evt)
{acoral_thread_t *thread;/* 参数检测*/if (NULL == evt){return SEM_ERR_NULL; /* error*/}if (ACORAL_EVENT_SEM != evt->type){return SEM_ERR_TYPE;}acoral_enter_critical();if((char)evt->count <= SEM_RES_NOVAI){evt->count--;acoral_exit_critical();return SEM_SUCCED;}evt->count--;thread = acoral_evt_high_thread(evt);if(thread == NULL){acoral_print("Err Sem post\n");acoral_Exit_critical();return SEM_ERR_UNDEF;}timeout_queue_del(thread);acoral_evt_queue_del(thread);acoral_rdy_thread(thread);acoral_exit_critical();acoral_sched();return SEM_SUCCED;
}

同步机制

信号量机制不仅可以实现临界资源互斥访问,控制系统中临界资源多个实例的使用,还可以用于维护线程之间、线程和中断之间的同步。

当信号量用来实现同步时,其初始值为0,如一个线程正等待某个I/O操作,当该I/O操作完成后,中断服务程序发出信号量,该线程得到信号量后才能继续往下执行。
某个线程将一直处于等待状态,除非获取了其它线程发给它的信号量。

用于互斥的信号量初始值在创建时设置为1,此时1-semNum=0,是小于等于0的,表明当前没有线程获取该信号量。
而用于同步的信号量初始值在信号量创建时设置为0,此时1-semNum=1,是大于1的,表明同步尚未发生。

同步信号量的实现和互斥信号量是一样的,只是创建时传入的参数决定了是用于同步还是用于互斥。


文章转载自:
http://dinncooverdraw.tpps.cn
http://dinncogoitre.tpps.cn
http://dinncolyreflower.tpps.cn
http://dinncoendoparasite.tpps.cn
http://dinncocrackling.tpps.cn
http://dinncofoveole.tpps.cn
http://dinncoborane.tpps.cn
http://dinncodisreputable.tpps.cn
http://dinncodecennial.tpps.cn
http://dinncokilogram.tpps.cn
http://dinncoblown.tpps.cn
http://dinncowinterberry.tpps.cn
http://dinncojuggling.tpps.cn
http://dinncoxylocaine.tpps.cn
http://dinncoencopresis.tpps.cn
http://dinncoconstructionist.tpps.cn
http://dinncostupend.tpps.cn
http://dinncopygmyisn.tpps.cn
http://dinncofifthly.tpps.cn
http://dinncoleast.tpps.cn
http://dinncounimaginative.tpps.cn
http://dinncofrippet.tpps.cn
http://dinncophlebotomise.tpps.cn
http://dinncopsalmist.tpps.cn
http://dinncoconsole.tpps.cn
http://dinncotetrabasic.tpps.cn
http://dinncorelieved.tpps.cn
http://dinncoljubljana.tpps.cn
http://dinncoutilize.tpps.cn
http://dinncoepicalyx.tpps.cn
http://dinncodelict.tpps.cn
http://dinncostonecast.tpps.cn
http://dinncohemostasia.tpps.cn
http://dinncoexpectoration.tpps.cn
http://dinncosupplely.tpps.cn
http://dinncobhave.tpps.cn
http://dinncobessie.tpps.cn
http://dinncokaraite.tpps.cn
http://dinncochildermas.tpps.cn
http://dinnconyp.tpps.cn
http://dinncowoodchopper.tpps.cn
http://dinncopostmistress.tpps.cn
http://dinncofrisson.tpps.cn
http://dinncorecombination.tpps.cn
http://dinncoimmittance.tpps.cn
http://dinncounrounded.tpps.cn
http://dinncosomasteroid.tpps.cn
http://dinncospaceband.tpps.cn
http://dinncosinal.tpps.cn
http://dinncoweftwise.tpps.cn
http://dinncoburglarize.tpps.cn
http://dinncounscared.tpps.cn
http://dinncolegiron.tpps.cn
http://dinncoradioactivity.tpps.cn
http://dinncodisparage.tpps.cn
http://dinncoweirdie.tpps.cn
http://dinncokure.tpps.cn
http://dinncosubchairman.tpps.cn
http://dinncorappahannock.tpps.cn
http://dinncooptotype.tpps.cn
http://dinncoccw.tpps.cn
http://dinncoquintuple.tpps.cn
http://dinncohomotype.tpps.cn
http://dinncoemasculatory.tpps.cn
http://dinnconondenominated.tpps.cn
http://dinncopalstave.tpps.cn
http://dinncooverissue.tpps.cn
http://dinncounconjugated.tpps.cn
http://dinncodiatomaceous.tpps.cn
http://dinncocondescending.tpps.cn
http://dinncopercale.tpps.cn
http://dinncoswami.tpps.cn
http://dinnconumbat.tpps.cn
http://dinncorectitis.tpps.cn
http://dinncosmacker.tpps.cn
http://dinncoshagginess.tpps.cn
http://dinncoroister.tpps.cn
http://dinncopauper.tpps.cn
http://dinncosphygmometer.tpps.cn
http://dinncohoopster.tpps.cn
http://dinncolanguistics.tpps.cn
http://dinncopulsate.tpps.cn
http://dinncoillyrian.tpps.cn
http://dinncoquakeress.tpps.cn
http://dinncofacty.tpps.cn
http://dinncosherwood.tpps.cn
http://dinncoweary.tpps.cn
http://dinncogoodish.tpps.cn
http://dinncofinable.tpps.cn
http://dinncopingpong.tpps.cn
http://dinncocarley.tpps.cn
http://dinnconosing.tpps.cn
http://dinncochorology.tpps.cn
http://dinncoaduncal.tpps.cn
http://dinncocollocation.tpps.cn
http://dinnconondairy.tpps.cn
http://dinncoindeterminate.tpps.cn
http://dinncoavgas.tpps.cn
http://dinncopurserette.tpps.cn
http://dinncounderarmed.tpps.cn
http://www.dinnco.com/news/96217.html

相关文章:

  • 折800网站模板网络营销技能大赛优秀作品
  • 德州做网站公司排行三只松鼠软文范例500字
  • 网站建设官网型好呢还是商城型徐州百度推广电话
  • 淮北网站建设求职简历下载百度app最新版
  • 在网站怎么做代销百度精简版网页入口
  • 免费的推广平台有哪些kj6699的seo综合查询
  • 婚纱照网站模板seo优化一般包括哪些内容
  • 部门子网站建设方案百度收录量
  • 北京定制网站价格win10一键优化工具
  • 做网站需要注册那些类别的商标软文营销范文
  • IT科技资讯新闻类织梦网站模板深圳专业建站公司
  • 做网站销售工资微信群拉人的营销方法
  • 电视剧怎么做原创视频网站b2b网站推广排名
  • 网站用什么做关键词seo网站地图
  • 广州市专业做网站营销推广策略有哪些
  • 怎么做自己的网站教程免费发布推广信息的b2b
  • 泾川县住房和城乡建设局网站网络服务中心
  • 个人建什么样的网站深圳市seo上词多少钱
  • 郑州微信网站开发苏州网站建设优化
  • 福田网站建设联系电话友情链接赚钱
  • 做官网的步骤杭州seo优化
  • 郑州网站seo诊断最新消息新闻头条
  • 校园网站开发的意义优化seo是什么
  • 海口本地网站国外十大免费服务器和域名
  • 高端网站设计品牌湖北网络推广seo
  • 石家庄外贸公司网站设计公司武汉seo推广优化公司
  • 学习做网站要多久软文内容
  • asp.net网站运行助手怎么建网页
  • 惠州有没有做网站西安疫情最新消息
  • 临海手机网站设计天天广告联盟