关于进程同步,该如何解决

关于进程同步
我用两个进程同步来控制一个变量,一个加一个减,但是长时间运行过后发现这个变量的值没能控制在一个稳定的范围,涨了很多。
代码大概是这样的,两个进程是通过共享内存来实现通信的,大家看看有什么问题

//A program
HANDLE hmutex=OpenMutex();
while(1)
{
WaitForSingleObject(hmutex,INFINITE);
a=Readmemn();//自己写的从共享内存中读数的函数
a++;
Writemem(a);//向共享内存中写数的函数
ReleaseMutex(hmutex);
......
Sleep(1000);
}

//B program
HANDLE hmutex=CreateMutex();
Writemem(a);//向共享内存中写数的函数
while(1)
{
WaitForSingleObject(hmutex,INFINITE);
a=Readmemn();//自己写的从共享内存中读数的函数
a--;
Writemem(a);//向共享内存中写数的函数
ReleaseMutex(hmutex);
......
Sleep(1000);
}

------解决方案--------------------
引用:
Quote: 引用:

初始值是多少?

初始值我设定的是10 运行了一晚上变成 一千多了。。。


正常吧。10~1000也变化不大,说明两个程序都轮流到了。可能是操作系统并非完全平分的时间片。
------解决方案--------------------
足够长时间运行后,出现多少都是正常的

控制范围可以有多种方式

方式1:增加的进程在数值较大的时候不增加,减少的进程在数字较小时不减少

方式2:增加的进程在数值较大时增加睡眠时间,减少的进程在数字较小时增加睡眠时间
------解决方案--------------------
http://bbs.****.net/topics/390787357
------解决方案--------------------
//A program
HANDLE hmutex=OpenMutex();
int count = 0;
while(1)
{
WaitForSingleObject(hmutex,INFINITE);
a=Readmemn();//自己写的从共享内存中读数的函数
if (a > 0) {
    a = -1; // 负责将a置为-1
    Writemem(a);//向共享内存中写数的函数
    count = 0;
} else {
    if (count++ > 10) { // 明显B program 已挂
    }
}

ReleaseMutex(hmutex);
......
Sleep(1000);
}
 
//B program
HANDLE hmutex=CreateMutex();
int count = 0;
a = 1;
Writemem(a);//向共享内存中写数的函数
while(1)
{
WaitForSingleObject(hmutex,INFINITE);
a=Readmemn();//自己写的从共享内存中读数的函数
if (a < 0) {
    a = 1; // 负责将a置为1
    Writemem(a);//向共享内存中写数的函数
    count = 0;
} else {
    if (count++ > 10) { // 明显A program 已挂
    }
}
ReleaseMutex(hmutex);
......
Sleep(1000);
}