12、同步、互斥与通信概论.ppt

  1. 1、本文档共128页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
12、同步、互斥与通信概论

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 谢谢! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 发送(置位)事件标志组中的事件标志OSFlagPost() OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U *err) { OS_FLAG_NODE *pnode; BOOLEAN sched= FALSE;//初始化调度标志 OS_FLAGS flags_cur, flags_rdy; pgrp-OSFlagFlags |= flags;//置位事件标志 pnode = (OS_FLAG_NODE *)pgrp-OSFlagWaitList;//获取任务等待链头节点 while (pnode != (OS_FLAG_NODE *)0) {//如果有任务等待,遍历等待链 switch (pnode-OSFlagNodeWaitType) { case OS_FLAG_WAIT_SET_ALL://”与”方式等待 flags_rdy = pgrp-OSFlagFlags pnode-OSFlagNodeFlags; if (flags_rdy == pnode-OSFlagNodeFlags) {//符合等待条件 if (OS_FlagTaskRdy(pnode, flags_rdy) == TRUE) sched = TRUE;//如果任务就绪,设置调度标志 } break; case OS_FLAG_WAIT_SET_ANY://”或”方式等待 flags_rdy = pgrp-OSFlagFlags pnode-OSFlagNodeFlags; if (flags_rdy != (OS_FLAGS)0) {//有满足条件的事件标志 if (OS_FlagTaskRdy(pnode, flags_rdy) == TRUE) sched = TRUE; //如果任务就绪,设置调度标志 } break; } pnode = (OS_FLAG_NODE *)pnode-OSFlagNodeNext;//下一个等待事件标志的节点 } if (sched == TRUE) OS_Sched();//如果设置了调度标志,则实施调度 *err = OS_NO_ERR; return (pgrp-OSFlagFlags); } 发送(置位)事件标志组中的事件标志OSFlagPost() 删除事件集 回收事件集控制块到空闲链中,等待接收该事件集的任务被恢复就绪 删除事件标志组OSFlagDel() OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, INT8U opt, INT8U *err) { BOOLEAN tasks_waiting; OS_FLAG_NODE *pnode; if (pgrp-OSFlagWaitList != (void *)0) tasks_waiting = TRUE;//有任务等待 else tasks_waiting = FALSE;//无任务等待 switch (opt) { case OS_DEL_NO_PEND://在无任务等待时才删除事件标志组 if (tasks_waiting == FALSE) {//无任务等待,释放控制块到空闲链中 pgrp-OSFlagType = OS_EVENT_TYPE_UNUSED; pgrp-OSFlagWaitList = (void *)OSFlagFreeList; OSFlagFreeList

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档