由于最近经常用到锁的操作,所以打算写一篇文章记录下相关的操作和感想。以下就用临界区(Window平台)举例子。 假如有个SetVal函数,该函数需要用到加锁和解锁,该函数有多个出口,第1版本的SetVal代码如下:
int SetVal(int iVal) { CRITICAL_SECTION stSection; InitializeCriticalSection(&stSection); EnterCriticalSection(&stSection); if ( 1 == iVal ) { g_iVal = 2; LeaveCriticalSection(&stSection); return 1; } else if( 2 == iVal) { g_iVal = 10; LeaveCriticalSection(&stSection); return 2; } else { g_iVal = 20; LeaveCriticalSection(&stSection); } return 0; }
假如写代码的时候不小心少写了解锁的代码,对后面的影响是很大的。是否有好的办法既减少编写代码错误,同时不必要每个函数出口点都添加解锁代码呢?想到当对象生命期结束时会自动调用其析构函数,如果把解锁放在析构函数是否可行?考虑到有不同的锁,于是写了一个抽象锁类&#x