- #include <windows.h>
- class InterLock
- {
- public:
- InterLock()
- {
- InitializeCriticalSection(&cs_);
- }
- ~InterLock()
- {
- DeleteCriticalSection(&cs_);
- }
- void enter()
- {
- EnterCriticalSection(&cs_);
- }
- void leave()
- {
- LeaveCriticalSection(&cs_);
- }
- private:
- CRITICAL_SECTION cs_;
- };
- template <typename LockType>
- class AutoLock
- {
- public:
- AutoLock(LockType& lock) : lock_(lock)
- {
- lock_.enter();
- }
- ~AutoLock()
- {
- lock_.leave();
- }
- private:
- LockType& lock_;
- };
- 现在当某个函数需要同步时,就可以在其初加上:
- InterLock lock_; AutoLock<InterLock> lock(lock_);
- 这样就会调用构造函数,从而加锁,而函数结束后,会自动调用析构函数,从而释放锁。
C++中定义一个函数结束后自动释放的锁
最新推荐文章于 2025-10-30 13:25:30 发布
本文介绍了一种利用Windows API中的临界区(Critical Section)实现互斥操作的方法,并通过自定义`InterLock`类及模板类`AutoLock`来简化线程同步过程。这种方式确保了临界资源的安全访问。

225

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



