CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

怎么实现互斥机制?

楼主poplau(和你聊聊软件开发)2004-12-03 08:53:54 在 VC/MFC / 网络编程 提问

举例:程序是这样。  
  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;  
  }  
  /////////////////////////////////////////  
  可是我听说好像有一种关键区技术是专门来解决这种问题的.谁来讲解一下;  
   
  最后,忽然想到一个问题,如果是进程之间,怎么来确保同步问题.:)谢谢了!  
  问题点数:30、回复次数:9Top

1 楼vcleaner(我没当大哥很久了.......)回复于 2004-12-03 09:02:17 得分 2

同步!  
  参考:  
  http://www.vckbase.net/document/viewdoc/?id=758Top

2 楼iicup(双杯献酒)回复于 2004-12-03 09:10:18 得分 3

只有线程才存在同步问题。  
  函数不存在这个问题。  
   
  在函数里这样做,  
  要么  
  (1)没有用处  
  要么  
  (2)导致死锁。Top

3 楼lzzqqq(Jonersen)回复于 2004-12-03 09:17:31 得分 3

CSingleLock  
  CMultiLock  
  这几个类都行。  
  好象还有一种内核方式的加一操作,叫什么想不起来了。。Top

4 楼poplau(和你聊聊软件开发)回复于 2004-12-03 11:47:03 得分 0

//////////////////我查了关键区的资料/////不知道能不能行哈,我贴出来  
  int   i=0;  
  CRITICAL_SECTION   cr;  
   
  程序开始  
  {  
    InitializeCriticalSection(&cr);  
  }  
   
  void   a()  
  {  
      EnterCriticalSection(&cr);//自动等待并获得权限  
      i++;  
      LeaveCriticalSection(&cr);//离开操作权限  
  }  
   
  void   b()  
  {  
      EnterCriticalSection(&cr);  
      i--;  
      LeaveCriticalSection(&cr);  
  }  
   
  程序结束  
  {  
      DeleteCriticalSection(&cr);  
  }Top

5 楼barsteng(barsteng)回复于 2004-12-03 12:14:46 得分 3

临界区CriticalSection  
  互斥Mutex  
  事件Event  
  都可以Top

6 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-03 12:54:35 得分 3

进程之间可以用临界区,互斥,事件,信号量等来同步Top

7 楼lzzqqq(Jonersen)回复于 2004-12-03 14:58:11 得分 5

Jeffrey   Richter大牛推荐用互锁函数家簇里的:  
  InterlockedExchangeAdd(&i,1);  
  来代替你的i++就行了。  
  这个函数是用原子操作方式对i进行增加.  
  而且是“用户方式”的线程同步方式。  
  比起“内核方式”的线程同步技术来高效得多。  
  Top

8 楼HunterForPig(留着口水的猪)回复于 2004-12-03 15:16:05 得分 8

用mutex  
  mutex.lock  
  i++  
  mutex.unlock  
   
  mutex.lock  
  i++  
  mutex.unlock  
   
   
  Top

9 楼jia20003(『gloomy fish』兄弟们一个一个结婚刺激我想跳楼!)回复于 2004-12-03 17:51:46 得分 3

将用到的flag定义为关键资源,用mutex或者是临界段先取得再访问~~~~~Top

相关问题

  • 信号量实现的同步互斥机制
  • 怎么样用C++语言实现一个windows的进程互斥的类?(我是新手,谢谢指点)
  • 怎么突出实现按钮的按下后下陷再按一下弹起效果,同时又能实现互斥功能,急
  • 如何实现一段代码访问的互斥性?
  • 求帖临界资源的互斥访问的实现
  • c语言实现程序互斥问题 急.....
  • 如何在MFC中实现工具条按钮的互斥
  • 消息机制,消息定义 到底是怎么实现的?
  • 问个问题,怎么实现虚函数机制?
  • 请问用osworkflow怎么实现并发机制?

关键词

  • 函数
  • 线程
  • 互斥
  • cr
  • 临界
  • mutex
  • 操作
  • 程序
  • 方式
  • 区

得分解答快速导航

  • 帖主:poplau
  • vcleaner
  • iicup
  • lzzqqq
  • barsteng
  • oyljerry
  • lzzqqq
  • HunterForPig
  • jia20003

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo