其他分享
首页 > 其他分享> > 四、共享资源保护

四、共享资源保护

作者:互联网

一、共享资源

典型的共享资源有:变量(静态或全局)、数据结构体、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