编写程序不容易,编写多线程的程序更不容易。相信编写过多线程的程序都应该有这样的一个痛苦过程,什么样的情况呢?朋友们应该看一下代码就明白了,
- void data_process()
- {
- EnterCriticalSection();
- if(/* error happens */)
- {
- LeaveCriticalSection();
- return;
- }
- if(/* other error happens */)
- {
- return;
- }
- LeaveCriticalSection();
- }
那么,有没有可能利用C++的特性,自动处理这种情况呢?还真有。我们看看下面这个代码,
- class CLock
- {
- CRITICAL_SECTION& cs;
- public:
- CLock(CRITICAL_SECTION& lock):cs(lock){
- EnterCriticalSection(&cs);
- }
- ~CLock() {
- LeaveCriticalSection(&cs);
- }
- }
- class Process
- {
- CRITICAL_SECTION cs;
- /* other data */
- public:
- Process(){
- InitializeCriticalSection(&cs);
- }
- ~Process() {DeleteCriticalSection(&cs);}
- void data_process(){
- CLock lock(cs);
- if(/* error happens */){
- return;
- }
- return;
- }
- }
其实,这就是一个c++的trick。
本文介绍了一种使用C++特性自动处理多线程中临界区资源的方法。通过构造一个智能锁类,无论何时发生错误,都可以确保正确地释放资源,避免死锁。
2416

被折叠的 条评论
为什么被折叠?



