C/C++技巧 自动解锁
2023-06-06
36
0
在线程或进程的同步时,经常需要用到临界体,互斥体等同步对象,在需要同步的片段开始出使用临界体加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++的理解,巧妙地利用语言特性帮助我们解决一些编程中的问题。