ACE的guard和 WINDOWS的关键代码段 效率一样吗
ACE的guard和 WINDOWS的关键代码段 效率一样吗?WINDOWS的关键代码段 对应 ACE的guard 还是别的呢? 效率上应该没什么问题,毕竟都inline了,但是你说的对应win的CS应该对应到ACE的Mutex,而不是Guard,我个人认为 楼上说的有道理。ACE中有ACE_Mutex,ACE_Null_Mutex,ACE_Thread_Mutex,ACE_Process_Mutex,其中,ACE_Null_Mutex并不是用来进行线程同步的,是作为单线程应用而提供的(可以容易的通过一点修改实现多线程同步,即改为其他的Mutex类),ACE_Thread_Mutex使用的就是CS,只能用于进程内的线程间同步,ACE_Process_Mutex使用的是MUTEX,用于进程内或者进程间的线程同步,ACE_Mutex并不常用,通常推荐使用其他的Mutex类。
而GUARD并不是同步类,只是用于锁的自动获取和释放,采用的是RAII方式,由于C++支持异常,当我们获取到锁的时候,一旦发生异常退出,有可能锁未释放,就会导致死锁,GUARD的作用就是防止异常发生时有可能导致的死锁,C++标准中指定,无论异常与否,都会保证stack变量的析构被调用,因此,就保证了锁能够在任何情况下都被释放,也就不存在死锁的情况了,GUARD的作用正是如此。
页:
[1]