以下为看视频笔记..........
1.临界区概念
临界资源是指一次仅允许一个线程访问的共享资源。它可以是一个具体的硬件设备(如打印机等),也可以是一个变量、一个缓冲区。
不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它们进行访问
每个线程中的访问(操作)临界资源的那段代码称为临界区(Critiacl Section),我们每一次只允许一个线程进入临界区。
/*
程序的目的先把全局变量value从0加到10000,在赋值为500.注意顺序。
演示全局变量value为临界区资源,两个线程访问变量value。
*/
uint32_t value = 0; //一个变量为临界资源
void thread1_entry(void *para) //线程1 访问全局变量value,进行加价操作
{
uint32_t i=0;
for(i=0;i<10000;i++)
{
rt_kprintf("%d\\r\rn",value);
value++;
}
}
void thread2_entry(void *para) //线程2 访问全局变量value进行值的改写
{
rt_thread_delay(50);
value = 500;
}
为了以上value值能够先加到10000后在赋值为500,每次操作我们要有临界区保护操作。
2. 临界区保护
RT—Thread提供了多种途径来进行临界区保护
1关闭系统调度保护临界区:禁止调度,关闭中断
2互斥特性保护临界区:信号量,互斥量
1