举例:程序是这样。
int i=0;void a()
{
i++;
}void b()
{
i--;
}怎么在执行a的时候不让b执行,有什么好的办法。我想的方式是用一个bool变量来做。
int i=0;
BOOL do=FALSE;void a()
{
while do{
sleep(10);
}
do=TRUE;
i++;
do=FALSE;
}void b()
{
while do{
sleep(10);
}
do=TRUE;
i--;
do=FALSE;
}
/////////////////////////////////////////
可是我听说好像有一种关键区技术是专门来解决这种问题的.谁来讲解一下;最后,忽然想到一个问题,如果是进程之间,怎么来确保同步问题.:)谢谢了!
int i=0;void a()
{
i++;
}void b()
{
i--;
}怎么在执行a的时候不让b执行,有什么好的办法。我想的方式是用一个bool变量来做。
int i=0;
BOOL do=FALSE;void a()
{
while do{
sleep(10);
}
do=TRUE;
i++;
do=FALSE;
}void b()
{
while do{
sleep(10);
}
do=TRUE;
i--;
do=FALSE;
}
/////////////////////////////////////////
可是我听说好像有一种关键区技术是专门来解决这种问题的.谁来讲解一下;最后,忽然想到一个问题,如果是进程之间,怎么来确保同步问题.:)谢谢了!
解决方案 »
- 关于网络传输的问题
- 谁能发一个稳定的完成端口代码给我?谢谢
- 想做一个类似Sniffer的程序,怎样才能得到数据包里的数据部分
- 在线等~ 请问如何把TextOut函数输出内容的底色设成透明??(即能看见字底的其他背景)
- 书本的错?我的错?
- 二进制文件和文本文件的区别就在于对换行符的理解不同吗?谢谢
- 急急!!如何向另一个程序的一个控件(如按钮)发送一个消息(如将无效的按钮设为有效)??
- 接收数据的时候buffer应该怎么开?
- 如何自动修改某个文件名???
- 大家帮忙,那里可以找到与html解释器相关的原码与文档?
- 为什么我切分完窗口之后 pDC->TextOut就不能显示字符串了啊?
- DrawEdge这个函数能绘制带颜色的嘛?
参考:
http://www.vckbase.net/document/viewdoc/?id=758
CMultiLock
这几个类都行。
好象还有一种内核方式的加一操作,叫什么想不起来了。。
int i=0;
CRITICAL_SECTION cr;程序开始
{
InitializeCriticalSection(&cr);
}void a()
{
EnterCriticalSection(&cr);//自动等待并获得权限
i++;
LeaveCriticalSection(&cr);//离开操作权限
}void b()
{
EnterCriticalSection(&cr);
i--;
LeaveCriticalSection(&cr);
}程序结束
{
DeleteCriticalSection(&cr);
}
互斥Mutex
事件Event
都可以
InterlockedExchangeAdd(&i,1);
来代替你的i++就行了。
这个函数是用原子操作方式对i进行增加.
而且是“用户方式”的线程同步方式。
比起“内核方式”的线程同步技术来高效得多。
mutex.lock
i++
mutex.unlockmutex.lock
i++
mutex.unlock