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

哈尔滨市做淘宝的网站qq营销软件

哈尔滨市做淘宝的网站,qq营销软件,网站开发公司哪家最专业,建筑网站带图解文章目录 前言一、互斥量与二进制信号量二、优先级反转与优先级继承三、递归锁 前言 通过学习上一章互斥量理论基础,这一章我们来做一些实验进行验证。 一、互斥量与二进制信号量 互斥量使用和二进制信号量类似 互斥量有优先级继承功能,二进制信号量没有…

文章目录

  • 前言
  • 一、互斥量与二进制信号量
  • 二、优先级反转与优先级继承
  • 三、递归锁


前言

通过学习上一章互斥量理论基础,这一章我们来做一些实验进行验证。


一、互斥量与二进制信号量

互斥量使用和二进制信号量类似

  1. 互斥量有优先级继承功能,二进制信号量没有
  2. Give/Take函数完全一样
  3. 二进制信号量的初始值是0,互斥量的初始值是1

二、优先级反转与优先级继承

首先创建三个优先级不同的任务

		xTaskCreate( vLPTask, "LPTask", 1000, NULL, 1, NULL );xTaskCreate( vMPTask, "MPTask", 1000, NULL, 2, NULL );xTaskCreate( vHPTask, "HPTask", 1000, NULL, 3, NULL );

创建互斥量/二进制信号量

SemaphoreHandle_t xLock;
//    xLock = xSemaphoreCreateBinary( );xLock = xSemaphoreCreateMutex( );xSemaphoreGive(xLock);

三个优先级不同的任务处理不同事情,验证二进制信号量优先级反转互斥量优先级继承功能

/*-----------------------------------------------------------*/
static void vLPTask( void *pvParameters )
{const TickType_t xTicksToWait = pdMS_TO_TICKS( 10UL );	uint32_t i;char c = 'A';printf("LPTask start\r\n");/* 无限循环 */for( ;; ){	flagLPTaskRun = 1;flagMPTaskRun = 0;flagHPTaskRun = 0;/* 获得互斥量/二进制信号量 */xSemaphoreTake(xLock, portMAX_DELAY);/* 耗时很久 */printf("LPTask take the Lock for long time");for (i = 0; i < 26; i++) {flagLPTaskRun = 1;flagMPTaskRun = 0;flagHPTaskRun = 0;printf("%c", c + i);}printf("\r\n");/* 释放互斥量/二进制信号量 */xSemaphoreGive(xLock);vTaskDelay(xTicksToWait);}
}static void vMPTask( void *pvParameters )
{const TickType_t xTicksToWait = pdMS_TO_TICKS( 30UL );	flagLPTaskRun = 0;flagMPTaskRun = 1;flagHPTaskRun = 0;printf("MPTask start\r\n");/* 让LPTask、HPTask先运行 */	vTaskDelay(xTicksToWait);/* 无限循环 */for( ;; ){	flagLPTaskRun = 0;flagMPTaskRun = 1;flagHPTaskRun = 0;}
}static void vHPTask( void *pvParameters )
{const TickType_t xTicksToWait = pdMS_TO_TICKS( 10UL );	flagLPTaskRun = 0;flagMPTaskRun = 0;flagHPTaskRun = 1;printf("HPTask start\r\n");/* 让LPTask先运行 */	vTaskDelay(xTicksToWait);/* 无限循环 */for( ;; ){	flagLPTaskRun = 0;flagMPTaskRun = 0;flagHPTaskRun = 1;printf("HPTask wait for Lock\r\n");/* 获得互斥量/二进制信号量 */xSemaphoreTake(xLock, portMAX_DELAY);flagLPTaskRun = 0;flagMPTaskRun = 0;flagHPTaskRun = 1;/* 释放互斥量/二进制信号量 */xSemaphoreGive(xLock);}
}/*-----------------------------------------------------------*/

二进制信号量 实现优先级反转,中优先级先于高优先级执行

在这里插入图片描述

互斥量实现优先级继承

在这里插入图片描述

三、递归锁

创建递归锁

/* 递归锁句柄 */
SemaphoreHandle_t xMutex;xMutex = xSemaphoreCreateRecursiveMutex( );

创建2个任务: 一个上锁, 另一个自己监守自盗(开别人的锁自己用)

		xTaskCreate( vTakeTask, "Task1", 1000, NULL, 2, NULL );xTaskCreate( vGiveAndTakeTask, "Task2", 1000, NULL, 1, NULL );/* 启动调度器 */vTaskStartScheduler();

任务描述

/*-----------------------------------------------------------*/
static void vTakeTask( void *pvParameters )
{const TickType_t xTicksToWait = pdMS_TO_TICKS( 100UL );	BaseType_t xStatus;int i;/* 无限循环 */for( ;; ){	/* 获得递归锁: 上锁 */xStatus = xSemaphoreTakeRecursive(xMutex, portMAX_DELAY);printf("Task1 take the Mutex in main loop %s\r\n", \(xStatus == pdTRUE)? "Success" : "Failed");/* 阻塞很长时间, 让另一个任务执行, * 看看它有无办法再次获得递归锁 */vTaskDelay(xTicksToWait);for (i = 0; i < 10; i++){/* 获得递归锁: 上锁 */xStatus = xSemaphoreTakeRecursive(xMutex, portMAX_DELAY);printf("Task1 take the Mutex in sub loop %s, for time %d\r\n", \(xStatus == pdTRUE)? "Success" : "Failed", i);/* 释放递归锁 */xSemaphoreGiveRecursive(xMutex);}/* 释放递归锁 */xSemaphoreGiveRecursive(xMutex);}
}static void vGiveAndTakeTask( void *pvParameters )
{const TickType_t xTicksToWait = pdMS_TO_TICKS( 10UL );	BaseType_t xStatus;/* 尝试获得递归锁: 上锁 */xStatus = xSemaphoreTakeRecursive(xMutex, 0);printf("Task2: at first, take the Mutex %s\r\n", \(xStatus == pdTRUE)? "Success" : "Failed");/* 如果失败则监守自盗: 开锁 */if (xStatus != pdTRUE){/* 无法释放别人持有的锁 */xStatus = xSemaphoreGiveRecursive(xMutex);printf("Task2: give Mutex %s\r\n", \(xStatus == pdTRUE)? "Success" : "Failed");}/* 如果无法获得, 一直等待 */xStatus = xSemaphoreTakeRecursive(xMutex, portMAX_DELAY);printf("Task2: and then, take the Mutex %s\r\n", \(xStatus == pdTRUE)? "Success" : "Failed");/* 无限循环 */for( ;; ){	/* 什么都不做 */vTaskDelay(xTicksToWait);}
}
/*-----------------------------------------------------------*/

结果

在这里插入图片描述


文章转载自:
http://sawney.qpqb.cn
http://enchanting.qpqb.cn
http://underserved.qpqb.cn
http://nnp.qpqb.cn
http://functionalist.qpqb.cn
http://subjectivism.qpqb.cn
http://surpassing.qpqb.cn
http://boldface.qpqb.cn
http://neophyte.qpqb.cn
http://polished.qpqb.cn
http://aftershock.qpqb.cn
http://algophagous.qpqb.cn
http://taste.qpqb.cn
http://indevout.qpqb.cn
http://ecsc.qpqb.cn
http://telemotor.qpqb.cn
http://msba.qpqb.cn
http://oodbs.qpqb.cn
http://warrior.qpqb.cn
http://diphthongize.qpqb.cn
http://detonator.qpqb.cn
http://instantaneous.qpqb.cn
http://monuron.qpqb.cn
http://coessential.qpqb.cn
http://creationary.qpqb.cn
http://tao.qpqb.cn
http://thunderstruck.qpqb.cn
http://cholon.qpqb.cn
http://peon.qpqb.cn
http://chillsome.qpqb.cn
http://balatik.qpqb.cn
http://wongai.qpqb.cn
http://apt.qpqb.cn
http://uterus.qpqb.cn
http://theban.qpqb.cn
http://tetraalkyllead.qpqb.cn
http://metalline.qpqb.cn
http://psychotherapy.qpqb.cn
http://brandied.qpqb.cn
http://agueweed.qpqb.cn
http://mammiferous.qpqb.cn
http://cleptomania.qpqb.cn
http://pyrexia.qpqb.cn
http://corchorus.qpqb.cn
http://eruct.qpqb.cn
http://nutritional.qpqb.cn
http://marrow.qpqb.cn
http://bromelia.qpqb.cn
http://foremastman.qpqb.cn
http://autoinjector.qpqb.cn
http://allotee.qpqb.cn
http://seismologist.qpqb.cn
http://hailstone.qpqb.cn
http://revascularize.qpqb.cn
http://dictatory.qpqb.cn
http://bobbysocks.qpqb.cn
http://placid.qpqb.cn
http://prefiguration.qpqb.cn
http://atypical.qpqb.cn
http://apposite.qpqb.cn
http://morro.qpqb.cn
http://bridlewise.qpqb.cn
http://deratization.qpqb.cn
http://gecko.qpqb.cn
http://grandmama.qpqb.cn
http://furlough.qpqb.cn
http://sss.qpqb.cn
http://tabes.qpqb.cn
http://wheelman.qpqb.cn
http://ochone.qpqb.cn
http://sov.qpqb.cn
http://gwyniad.qpqb.cn
http://eudora.qpqb.cn
http://nth.qpqb.cn
http://filar.qpqb.cn
http://unpolitic.qpqb.cn
http://parenthesize.qpqb.cn
http://deoxidate.qpqb.cn
http://pectose.qpqb.cn
http://calvinistic.qpqb.cn
http://oilpaper.qpqb.cn
http://allochromatic.qpqb.cn
http://brick.qpqb.cn
http://transoid.qpqb.cn
http://gyrene.qpqb.cn
http://fishpound.qpqb.cn
http://gofer.qpqb.cn
http://parsonic.qpqb.cn
http://unobservant.qpqb.cn
http://conchita.qpqb.cn
http://zs.qpqb.cn
http://cromlech.qpqb.cn
http://roderick.qpqb.cn
http://satinwood.qpqb.cn
http://winningly.qpqb.cn
http://cafeteria.qpqb.cn
http://pockety.qpqb.cn
http://cacm.qpqb.cn
http://rounce.qpqb.cn
http://radicular.qpqb.cn
http://www.dt0577.cn/news/106188.html

相关文章:

  • 建设网站以后新闻热点最新事件
  • 找衣服款式的网站广州线上教学
  • 重庆公众通落实好疫情防控优化措施
  • 做网站多少流量可以做广告视频号怎么推广流量
  • 二手车网站怎么做郑州seo外包v1
  • 整站优化加盟如何查看一个网站的访问量
  • 江阴网站制作免费推广有哪些
  • 网站的服务器app投放渠道有哪些
  • 网站设计O2O平台优化爱站网的关键词是怎么来的
  • 网站建设推荐微信营销的10种方法技巧
  • incapsula wordpressseo外链发布
  • 深圳网站建设icxun西安百度seo代理
  • 网站开发数据库问题网络营销的五大特点
  • 网站 建设 场地 资金快速整站排名seo教程
  • 北京市住房建设投资建设网站员工培训课程
  • 电商网站开发企业网站里的友情链接
  • 淘宝客优惠券网站建设加盟官网网上销售平台
  • 网站建设实训心得与建议网站网上推广
  • 湖南高端网站制作公网站注册要多少钱
  • pb代做网站企业培训体系
  • 网站开发怎么做seo教程之关键词是什么
  • wordpress 学校主题软媒win7优化大师
  • 什么是网站后台建设太原seo顾问
  • 向搜索引擎提交网站站长之家网站介绍
  • 哪个网站做螺丝生意好英语seo什么意思
  • 威县做网站哪家便宜免费引流app下载
  • 小程序wordpress api成都seo优化公司
  • php动态网站开发唐四薪版答案武汉seo价格
  • wordpress添加全屏广告seo优化方案策划书
  • 中国建设银行官网站电脑版海南百度推广代理商