当系统存在多个进程对同一个变量进行访问时,就会出现进程同步问题。这里先利用Lenix来制造出一个因为同步问题而出现错误的情况。
原始的代码是
int cnt = 0;
int app1(void)
{
int tmp;
printf("app1 count:%d\n",cnt);
tmp = cnt + 1;
printf("app1 count:%d\n",tmp);
cnt = tmp;
return 0;
}
int app2(void)
{
int tmp;
printf("app2 count:%d\n",cnt);
tmp = cnt + 1;
printf("app2 count:%d\n",tmp);
cnt = tmp;
return 0;
}
这样运行的结果是
运行结果是正常的,在预料之中。但是假如在程序中间有了其他的操作,用时较长,这里用一个Proc_delay来做一个延时,这时候出现的结果就不一样了。
int cnt = 0;
int app1(void)
{
int tmp;
printf("app1 count:%d\n",cnt);
tmp = cnt + 1;
Proc_delay(100);
printf("app1 count:%d\n",tmp);
cnt = tmp;
return 0;
}
int app2(void)
{
int tmp;
printf("app2 count:%d\n",cnt);
tmp = cnt + 1;
Proc_delay(200);
printf("app2 count:%d\n",tmp);
cnt = tmp;
return 0;
}
结果变成了
得不到想要的结果了。