编写程序不容易,编写多线程的程序更不容易。相信编写过多线程的程序都应该有这样的一个痛苦过程,什么样的情况呢?朋友们应该看一下代码就明白了,
- 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。