Focus on ACE

订阅 ace-china
电子邮件:
浏览存于 groups.google.com 上的所有帖子

C++博客 首页 新随笔 联系 聚合 管理
  63 Posts :: 3 Stories :: 18 Comments :: 0 Trackbacks
今天与一个朋友讨论死锁的时候,我说,我简单写一个程序,验证一下.
一测不要紧,本应该死锁的程序,怎么不死锁了呢?

我们来看代码吧

 1 // testMutex.cpp : Defines the entry point for the console application.
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "ACE/Thread_Mutex.h"
 6 #include "ACE/Log_Msg.h"
 7 #include "ACE/Guard_T.h"
 8 typedef ACE_Thread_Mutex MUTEX;
 9 class Logger
10 {
11 public:
12     void log(void)
13     {
14         ACE_GUARD(MUTEX,mon,mutex_);
15         ACE_DEBUG((LM_DEBUG,"(%t) 进入互斥体1\n"));
16         logCritical();
17 
18     }
19     void logCritical()
20     {
21         ACE_GUARD(MUTEX,mon,mutex_);
22         ACE_DEBUG((LM_DEBUG,"(%t) 为什么还能再进入进入互斥体1,为什么不在这里死锁\n"));
23     }
24 private:
25     MUTEX mutex_;
26 };
27 
28 
29 int ACE_TMAIN(int argc, _TCHAR* argv[])
30 {
31     ACE_DEBUG((LM_DEBUG,"(%t) 主线程\n"));
32 
33     Logger l;
34     l.log();  //影响不在这里死锁呢
35 
36    ACE_DEBUG((LM_DEBUG,"(%t) 主线程2\n"));
37     return 0;
38 }
39 
40 

屏幕输出的结果是

  (4492) 主线程
  (4492) 进入互斥体1
  (4492) 为什么还能再进入进入互斥体1,为什么不在这里死锁
  (4492) 主线程2


posted on 2006-07-09 22:56 Stone Jiang 阅读(1221) 评论(2)  编辑 收藏 引用 所属分类: ACE

Feedback

# re: 再次获得互斥体,为什么没有死锁 2006-07-11 09:01 alvin.msg@gmail.com
不都在同一线程里,当然可以重复获锁了!你这个未必太低级错误了吧!  回复  更多评论
  

# re: 再次获得互斥体,为什么没有死锁 2006-08-31 09:42 slay78
你这段代码在win32上面不会死锁,win32下面这个锁实现为critical_section,
这是个递归锁,把你这段代码放到linux下面试试看,保证死锁  回复  更多评论
  


专题:Android  iPad jQuery Chrome OS

博客园首页  IT新闻  知识库  学英语  C++程序员招聘
标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
每天10分钟,轻松学英语
网站导航: