本帖最后由 大头bb 于 2016-9-22 10:10 编辑
看了原子哥的代码和资料,资源共享里面的信号量机制有点不了解
假如有个共享资源区tmp_share[100];
task1和task2都有用到,
OS_SEM MY_SEM; //定义一个信号量,用于访问共享资源
OSSemCreate ((OS_SEM* )&MY_SEM,
(CPU_CHAR* )"MY_SEM",
(OS_SEM_CTR)1,
(OS_ERR* )&err);
void task1(void)
{
OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量
//代码段
OSSemPost (&MY_SEM,OS_OPT_POST_1,&err); //施放信号量
}
void task2(void)
{
OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量
//代码段
OSSemPost (&MY_SEM,OS_OPT_POST_1,&err); //施放信号量
}
看代码上觉得信号量实际上只是对一段操作共享资源区的代码段进行了上锁,并没有对共享资源区进行上锁?
如果别人改动我的代码创建一个新的task,应该还是可以访问共享资源区
谢谢大家
|