四、共享资源保护
作者:互联网
一、共享资源
典型的共享资源有:变量(静态或全局)、数据结构体、RAM中的表格、I/O设备中的寄存器、多个任务访问的函数等。 共享资源的可靠访问,任务必须对数据具有独享权变得极其重要,否则将可能导致任务间的竞争与数据损坏。 最常用的独占共享资源的方法有以下几种:- 关中断
- 禁止任务调度
- 使用信号量
- 使用互斥型信号量(互斥锁)
二、选择题
1.以下请问使用( A )方式保护最为合适。
void T1(void *parg) { while(1) { ........... 喂狗 ........... } }A. 关中断、开中断 B.给调度器上锁、解锁 C.信号量 D.互斥锁
2.以下请问使用( B )方式保护最为合适。
uint32 g=0; void T1(void *parg) { while(1) { ........... g++; ........... } } void T2(void *parg) { uint32_t a=0; while(1) { ........... a = g; ........... } }A. 关中断、开中断 B.给调度器上锁、解锁 C.信号量 D.互斥锁
3.以下请问使用( A )方式保护最为合适。
uint32 g=0; void T1(void *parg) { while(1) { ........... g++; ........... } } void T2(void *parg) { uint32_t a=0; while(1) { ........... a = g; ........... } } void USART1_IRQHandler(void) { ........... g = USART_ReceiveData(USART1); ........... }A. 关中断、开中断 B.给调度器上锁、解锁 C.信号量 D.互斥锁
4.以下请问使用( C )方式保护最为合适。
void T1(void *parg) { while(1) { ........... printf("hello teacher.wen\r\n"); ........... } } void T2(void *parg) { while(1) { ........... printf("good bye teacher.wen\r\n"); ........... } }
A. 关中断、开中断 B.给调度器上锁、解锁 C.信号量 D.互斥锁
5.以下请问使用( D )方式保护最为合适。
void T1(void *parg) { while(1) { ........... printf("hello teacher.wen\r\n"); ........... } } void T2(void *parg) { while(1) { ........... printf("good bye teacher.wen\r\n"); ........... } } void T3(void *parg) { while(1) { ........... printf("he's teacher.wen\r\n"); ........... } }
A. 关中断、开中断 B.给调度器上锁、解锁 C.信号量 D.互斥锁
三、辨析题
1.请分析以下代码。
void T1(void *parg) { while(1) { 调度器上锁 printf("hello teacher.wen\r\n"); delay_ms(1000) 调度器解锁 } } void T2(void *parg) { while(1) { 调度器上锁 printf("good bye teacher.wen\r\n"); delay_ms(1000) 调度器解锁 } }
2.请分析以下代码。
void T1(void *parg) { while(1) { 等待互斥锁 printf("hello teacher.wen\r\n"); OLED_ShowString(0,2,"this is task 1\r\n"); 释放互斥锁 } } void T2(void *parg) { uint8_t buf[5]={0}; while(1) { 等待互斥锁 printf("good bye teacher.wen\r\n"); dht11_read(buf) ...... 释放互斥锁 } }
3.请分析以下代码。
void T1(void *parg) { while(1) { 等待互斥锁 printf("hello teacher.wen\r\n"); OLED_ShowString(0,2,"this is task 1\r\n"); 释放互斥锁 } } void T2(void *parg) { uint8_t buf[5]={0}; while(1) { 等待互斥锁 printf("good bye teacher.wen\r\n"); dht11_read(buf) ...... 释放互斥锁 } }
4.请分析以下代码。
void app_task_init(void *parg) { 创建信号量,初值为0 } void T1(void *parg) { while(1) { 等待信号量 printf("hello teacher.wen\r\n"); 释放信号量 } } void T2(void *parg) { while(1) { 等待信号量 printf("good bye teacher.wen\r\n"); 释放信号量 } }
标签:parg,互斥,void,wen,共享资源,保护,while,........... 来源: https://www.cnblogs.com/yuanqiangfei/p/15143630.html