今天与一个朋友讨论死锁的时候,我说,我简单写一个程序,验证一下.
一测不要紧,本应该死锁的程序,怎么不死锁了呢?
我们来看代码吧
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