全局变量的保护
各个任务之间通过全局变量交换信息时,如果其
中某一任务在引用同一个全局变量期间,该变量在另
一任务中被重新赋值,那么就可能发生一些意想不到
的事情。一般我们采用这样的方法解决可能的问题。
首先在任务中定义若干个局部变量;之后将相应的全
局变量赋值这些局部变量。任务随后引用的是这些局
部变量,而不是全局变量,这样就避免了问题的发生。
具体程序设计流程如下所示:
Void Task{
int Local_ var;
UGL_ FOREVER{
SemTake(semStart,WAIT_FOREVER);
Local_var= Globle_var:
Subcall_1(Local_var);
Subcall_2(Local_var);
......
}/* UGL_FOREV ER */
对于数组等全局变量采用固定数组,会有利于防
止数组超界。
用户170333 2008-9-22 18:29
用户16649 2006-12-28 10:04
我在编程时遇到这样一个关于临界资源访问的问题不知道在如何解决才好,版主有何建议?
问题是这样的:
一个全局的临界资源,程序中有n个任务要访问它,其中只有1个任务写资源,其他n-1个任务读这个资源。通常情况下,只要在每个任务中对资源读写操作使用互斥信号量保护就可以了,但这样会造成n-1个读资源的任务之间由于要获取信号量产生阻塞现象,而我不希望读任务之间存在这种竞争现象,仅希望所有的读操作和写操作之间存在竞争现象。
不知道如何实现??(
shenyandetongxing_551209819 2006-12-7 12:19
用户977049 2006-12-7 09:35
请问将全局变量赋给局部变量后,这时应该释放信号量吧?即:
对于全局变量的访问:
semTake(semStart, WAIT_FOREVER);
Local_var = Globle_var;
semGive(semStart);
....
对于全局变量的更新:
......
semTake(semStart, WAIT_FOREVER);
Globle_var = Local_var;
semGive(semStart);
是这样吗,版主?