#define ACE_GUARD_ACTION(MUTEX, OBJ, LOCK, ACTION, REACTION) \
ACE_Guard< MUTEX > OBJ (LOCK); \
if (OBJ.locked () != 0) { ACTION; } \
else { REACTION; }
#define ACE_GUARD_REACTION(MUTEX, OBJ, LOCK, REACTION) \
ACE_GUARD_ACTION(MUTEX, OBJ, LOCK, ;, REACTION)
#define ACE_GUARD(MUTEX, OBJ, LOCK) \
ACE_GUARD_REACTION(MUTEX, OBJ, LOCK, return)
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN) \
ACE_GUARD_REACTION(MUTEX, OBJ, LOCK, return RETURN)
这是ACE定义的宏,用这些宏可以方便地节省很多代码量,虽然实际上代码就是一样的。Metex代表锁的种类,Obj代表ACE_Guard的对象,ACTION代表成功的动作,REACTION代表加锁失败的动作。
在ACE中存在读锁和写锁的区别,所以这些宏ACE_Guard也会派生出读锁和写锁。ACE_Guard存在显示的加锁和解锁,但在构造的时候会默认加锁。析构的时候会根据对象是否认为已经加锁,来进行解锁。当然还存在一些其他函数,但这并非是重点了。