C/C++技巧 自解锁

在线程或进程的同步时,经常需要用到临界体,互斥体等同步对象,在需要同步的片段开始出使用临界体加EnterCriticalSection,同步对象的结束处加LeaveCriticalSection,当然这样写是没有任何问题的,那有没有更加简单的方法来书写呢?
我们可以利用类的构造和析构来进行自动化的加解锁。

如:

class CMylock
{
CRITICAL_SECTION m_cs; 
Public:
    CMyLock(CRITICAL_SECTION &  cs)
    {
         m_cs = cs;
         EnterCriticalSection(&m_cs);
    }
    ~ CMyLock()
    {
         LeaveCriticalSection(&m_cs);
    }
};


Void Fun (CRITICAL_SECTION &  cs)
{
    //在大括号范围内lock有效,退出后自解析,释放锁
    {
         CMylock lock(cs);
        //做一些同步事情
    }

}

可考虑将其写成模板类,针对不同的对象进行特例化

Template<typename LOCKTYPE>
Class CMyLock
{
...
}
eg: CMyLock< CRITICAL_SECTION > lock;

这只是一个例子,对于一些成对出现的一些情况,都是可以这样使用。
其实这种使用真的没有什么特别的地方,只是我们对于C/C++的理解,巧妙地利用语言特性帮助我们解决一些编程中的问题。

取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!