ace中读写锁和递归锁性能

读写锁

ACE_READ_GUARD_RETURN(ACE_RW_Thread_Mutex, oGuard, m_oMutex, BOOL_FALSE);
ACE_WRITE_GUARD(ACE_RW_Thread_Mutex, oGuard, m_oMutex);

递归锁

ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, oGuard, m_oMutex, BOOL_FALSE);

  

测试环境8cpu,linux
如果加锁后处理的事情基本不耗时,实际测试效果表明递归锁的性能还高于读写锁
(抢到锁后只做一次判断就释放锁,每个线程抢到1000W或100W次锁后就打印日志)
5线程时,递归锁8秒1000W每线程,读写锁9秒1000W每线程
50线程时,递归锁12秒100W每线程,读写锁12秒100W每线程
200线程时,递归锁41秒100W每线程,读写锁51秒100W每线程
500线程时,递归锁114秒100W每线程,读写锁120秒100W每线程

如果加锁后处理的事情耗时,递归锁会阻塞,读写锁如果都是读则不会阻塞。
如果在抢到锁后usleep(2000),这时两者的差别就非常明显了。

递归锁虽然ACE_GUARD_RETURN,但是如果抢不到锁并不会return,而是会阻塞,递归锁不是自旋锁,并不消耗cpu,所以阻塞时没有明显的cpu消耗。

posted @ 2019-10-10 17:27  NAND  阅读(481)  评论(0)    收藏  举报