|
本帖最后由 nettoobad 于 2014-6-7 12:03 编辑
在多线程编程中,互斥体(锁)的应用非常广泛,如何编写漂亮的锁代码也是很关键的呦,当然使用互斥体(锁)的原语来编写也是可以的,但是,在实践工作中,一般使用更简单的自释放来处理锁的请求和释放。如果详细分类,有下面四种哦。
第零种:很少用,但必须知道,这是原理,主要在//todo的地方万一代码崩了,锁就可能死锁,所以衍生出了下面的三种形式,以第三种最为强健,完善,推荐使用:
ACE_Recursive_Thread_Mutex g
g.acquire();
//todo
g.release();
第一种:
//进步一些,用ACE_Guard的构造、析构函数保证锁的释放。
ACE_Guard<ACE_Recursive_Thread_Mutex> g(thread_mutex);
第二种:
//又进步一些,能有个处理分支,但是比较单一,不能处理锁定和锁定失败的两种情况
ACE_GUARD(ACE_Recursive_Thread_Mutex,g,thread_mutex);
第三种:
//修成正果,两种情况均能处理,其实第二种是在第三种方式的基础上封装的简化版
ACE_GUARD_ACTION(ACE_Recursive_Thread_Mutex,g,thread_mutex,
ACE_DEBUG((LM_DEBUG,ACE_TEXT("QtTest::resizeEvent锁定成功")));go to p1; ,
ACE_DEBUG((LM_DEBUG,ACE_TEXT("QtTest::resizeEvent锁定失败")));go to p2;); |
|