变量不在任务栈中造成的访问冲突

3 views
Skip to first unread message

高航

unread,
Jun 25, 2009, 10:23:35 PM6/25/09
to RTEMS Chinese User Group
变量不在任务栈中造成的访问冲突举例如下:

以下有test.h和test.c两个文件,.h中定义了一个数组和两个函数,两个函数中都对数组进行了访问。.c文件中定义了一个入口函数,函数中调
用了.h中定义的两个函数。当以my_task为入口函数启动多个任务时,多个任务对x数组的访问会出现冲突。请问有什么方法能解决这个问题吗?
(任务变量机制只能解决四字节全局变量的问题,况且任务变量过多会造成上下文切换时间太长,而通常像x[10]这种变量是很多的)
//test.h
int x[10];
void func1(){
//包含对x数组的访问
}
void func2(){
//包含对x数组的访问
}

//test.c
my_task()
{
......
func1();
func2();
}

coder

unread,
Jun 26, 2009, 7:00:08 AM6/26/09
to RTEMS Chinese User Group

On 6月26日, 下午12时23分, 高航 <hanggao2...@gmail.com> wrote:
> 变量不在任务栈中造成的访问冲突举例如下:
>
> 以下有test.h和test.c两个文件,.h中定义了一个数组和两个函数,两个函数中都对数组进行了访问。.c文件中定义了一个入口函数,函数中调
> 用了.h中定义的两个函数。当以my_task为入口函数启动多个任务时,多个任务对x数组的访问会出现冲突。请问有什么方法能解决这个问题吗?

semaphore

julyon

unread,
Jun 26, 2009, 12:35:43 PM6/26/09
to RTEMS Chinese User Group
其实操作系统提供了机制来解决这种问题,利用信号量就可以了。
我觉得你对任务变量的作用理解还不够。
我觉得任务变量本质不是用来解决冲突的,而是为编程方面提供了一种便利、灵活的手段。通过它,当面对全局变量,任务可以有自己的私有的对象。

而你说得问题,那是一个资源的冲突问题,一般用信号量来解决,跟任务变量没有太大的关系。
个人观点,呵呵!

Reply all
Reply to author
Forward
0 new messages