当系统存在多个进程对同一个变量进行访问时,就会出现进程同步问题。这里先利用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;
}
结果变成了

得不到想要的结果了。
本文通过使用Linux环境,展示了当多个进程同时访问同一变量时,可能会遇到的同步问题,并通过代码实例说明了如何在引入延迟操作后,导致预期结果失效的情况。
1218

被折叠的 条评论
为什么被折叠?



