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

新手建什么网站赚钱企业咨询管理公司是干什么的

新手建什么网站赚钱,企业咨询管理公司是干什么的,成都培训网站建设,在淘宝介绍里边怎么做网站链接一 接收到互斥量时,将互斥量的任务持有者赋值为当前任务 以下为xQueueGenericReceive()函数接收互斥量,互斥量不为空(未被别的任务持有),去除互斥量,并且将互斥量的持有者赋值为当前任务,紫色字…

  一 接收到互斥量时,将互斥量的任务持有者赋值为当前任务

以下为xQueueGenericReceive()函数接收互斥量,互斥量不为空(未被别的任务持有),去除互斥量,并且将互斥量的持有者赋值为当前任务,紫色字体部分

if( uxMessagesWaiting > ( UBaseType_t ) 0 )
            {
                /* Remember the read position in case the queue is only being
                peeked. */
                pcOriginalReadPosition = pxQueue->u.pcReadFrom;

                prvCopyDataFromQueue( pxQueue, pvBuffer );

                if( xJustPeeking == pdFALSE )
                {
                    traceQUEUE_RECEIVE( pxQueue );

                    /* Actually removing data, not just peeking. */
                    pxQueue->uxMessagesWaiting = uxMessagesWaiting - 1;

                    #if ( configUSE_MUTEXES == 1 )
                    {
                        if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
                        {
                            /* Record the information required to implement
                            priority inheritance should it become necessary. */
           pxQueue->pxMutexHolder = ( int8_t * ) pvTaskIncrementMutexHeldCount(); /*lint !e961 Cast is not redundant as TaskHandle_t is a typedef. */
                        }
                        else
                        {
                            mtCOVERAGE_TEST_MARKER();
                        }
                    }
                    #endif /* configUSE_MUTEXES */

二 接收任务接收不到信号量时,提升互斥量持有者任务的优先级

还是xQueueGenericReceive()函数接收互斥量,互斥量为空(被别的任务持有),而且时间未超时时,就是第一次尝试接收时,进行优先级继承,紫色字体函数

 /* Update the timeout state to see if it has expired yet. */
        if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
        {
            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
            {
                traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );

                #if ( configUSE_MUTEXES == 1 )
                {
                    if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
                    {
                        taskENTER_CRITICAL();
                        {
                            vTaskPriorityInherit( ( void * ) pxQueue->pxMutexHolder );
                        }
                        taskEXIT_CRITICAL();
                    }
                    else
                    {
                        mtCOVERAGE_TEST_MARKER();
                    }
                }
                #endif

                vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
                prvUnlockQueue( pxQueue );
                if( xTaskResumeAll() == pdFALSE )
                {
                    portYIELD_WITHIN_API();
                }
                else
                {
                    mtCOVERAGE_TEST_MARKER();
                }
            }

三 最终实现函数TaskPriorityInherit()解析

void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder )
    {
    TCB_t * const pxTCB = ( TCB_t * ) pxMutexHolder;

       
        if( pxMutexHolder != NULL )
        {
            
            if( pxTCB->uxPriority < pxCurrentTCB->uxPriority )
            {
                   /* Adjust the mutex holder state to account for its new
                priority.  Only reset the event list item value if the value is
                not    being used for anything else. */
                if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) //获取互斥量持有任务的节点辅助值,用于迁移到新优先级就绪链表时的排序
                {
                    listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ); //设定互斥量持有任务的节点辅助值,用于迁移到新优先级就绪链表时的排序
                }
                else
                {
                    mtCOVERAGE_TEST_MARKER();
                }

                /* If the task being modified is in the ready state it will need
                to be moved into a new list. */
                if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )//互斥量持有者任务现在处于就绪列表
                {
                    if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )//将互斥量持有者任务从其所在就绪列表移除
                    {
                        taskRESET_READY_PRIORITY( pxTCB->uxPriority );
                    }
                    else
                    {
                        mtCOVERAGE_TEST_MARKER();
                    }

                    /* Inherit the priority before being moved into the new list. */
                    pxTCB->uxPriority = pxCurrentTCB->uxPriority;//将互斥量持有者任务优先级赋值为当前任务优先级
                    prvAddTaskToReadyList( pxTCB );//将互斥量持有者任务移到相应优先级列表
                }
                else
                {
                    /* Just inherit the priority. */
                    pxTCB->uxPriority = pxCurrentTCB->uxPriority;  //将互斥量持有者任务优先级赋值为当前任务优先级,只进行优先级上升级,因为现在不在就绪列表中
                }

                traceTASK_PRIORITY_INHERIT( pxTCB, pxCurrentTCB->uxPriority );
            }
            else
            {
                mtCOVERAGE_TEST_MARKER();
            }
        }
        else
        {
            mtCOVERAGE_TEST_MARKER();
        }
    }
 

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

相关文章:

  • 服装公司 网站怎么做网站模板 整站源码下载
  • 电龙网站建设上海有名的设计工作室
  • 网站关键词选取的步骤大学生职业生涯规划ppt
  • 岫岩网站建设北京海大网智网站建设制作公司
  • 腾讯云怎么建设网站希音跨境平台入驻条件
  • 免费制作主图的网站长沙装修公司排名
  • 公司网站建设工作韩国唯美网站设计
  • 开网店需要自己做网站吗杭州做公司网站
  • 深圳专业建网站公司wordpress适合优化吗
  • 网站建设与管期末试题线上推广活动方案
  • 软文范例大全100字新手如何学seo
  • 网站后台管理系统php赛雷猴是什么意思
  • 网站分页样式哪些网站可以做代理商
  • 万维网包括哪些网站wordpress 字体不好看
  • 山东城建建设职业学院教务网站足球比赛统计数据
  • 如何查找网站广州网页模板建站
  • 1元做网站方案google关键词seo
  • 做网站买个域名多少钱天津seo优化
  • 静态网站开发预期效果室内设计培训班有用吗
  • 天津网站优化多少钱外贸大型门户网站制作
  • 看到网站的第一印象排名优化上首页怎么做
  • 建设广告联盟网站视联网视频会议系统
  • 专注徐州网站建设移动端应用
  • 珠海网站建设的公司排名建设商城网站价格
  • 关于京东商城网站建设的实践报告网页免费下载
  • 珠海制作网站网站前端模板下载
  • 网站建设的界面风格有哪些北京西路做网站的公司
  • 住房城乡建设网站wordpress安装工信部备案
  • 浙江省建筑信息平台国外seo做的好的网站
  • 环保网站案例深圳网站建设制作网络公司