CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请教一个关于线程和回调函数的问题

楼主isis(isis)2003-12-01 07:30:36 在 C/C++ / C++ 语言 提问

在Linux下一个小程序,启动一个线程,中间使用了Mutex锁,在加锁和解锁间注册了一个回调函数A,回调函数A中调用一个另外的函数B,函数B中同样有Mutex锁。  
  但是运行中出现了死锁,Debug中发现当线程在加锁和解锁间突然回调函数运行,当回调函数中的函数B试图请求锁的时候,出现死锁  
  想象中,应该是回调函数B等待线程放弃Mutex然后获得Mutex,然后把回调函数执行完,然后放弃Mutex,但是象上面的情况下出现了死锁  
  请教一下大家,是不是会调函数一定要一次执行完,而不允许中间等待某一个线程,(因为回调函数不是一个线程),还是可以理解为主线程的一个部分呢  
  由于我的回调函数一定要使用一些哪个线程的资源,所以回调函数一定要使用一个锁,请大家帮我解决一下这个问题,困惑了好久 问题点数:40、回复次数:3Top

1 楼Wolf0403(废人:独活十年~心如刀割)回复于 2003-12-01 09:26:09 得分 20

回调函数,在我的印象里,也就是一个函数指针解除引用,所以还是作为主线程的一个片段而不是一个独立线程运行的。也就是说:   A   ->   加锁   ->   B   ->   请求   Mutex   ->   释放   Mutex   ->   回到   A   ->   释放   Mutex  
  这里当然出现了死锁Top

2 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-01 10:32:42 得分 0

linuxTop

3 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-01 10:36:12 得分 20

linux我不懂,但你这种情况用  
  BOOL   TryEnterCriticalSection(  
      LPCRITICAL_SECTION   lpCriticalSection  
  );  
   
  是最好的了Top

相关问题

  • 紧急请教,线程中,调用线程中的函数和调用主线程中的函数,有啥区别?
  • 特急 线程的run() 函数 和 canvas的update() 函数
  • 辅助线程可以调用主线程的全局变量和函数吗?怎么用
  • 线程函数里调用的函数有什么要求吗 (立结)
  • 如何解决多线程时调用的函数和被调用的函数属于同一个类发生的错误
  • 请问如何在副线程中调用主线程中的函数?
  • 在线程中可使用回调函数吗?
  • 线程函数调用自身可以吗?
  • 回调函数与主程序是在一个线程中吗?
  • 线程中如何调用窗体的其他函数?

关键词

  • 函数
  • 线程
  • 调函数
  • 回调函数
  • 锁
  • mutex
  • 加锁
  • 出现了死锁
  • 运行
  • 使用

得分解答快速导航

  • 帖主:isis
  • Wolf0403
  • fireseed

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

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