【发布时间】:2023-03-26 05:23:01
【问题描述】:
我有一个函数foo() 获取critical section 进行一些处理并释放critical section。现在有多个控制流,所以为了避免忘记释放锁,我想把它包装在一个类,这样析构函数就会自动释放锁。
class Lock
{
public:
LPCRITICAL_SECTION m_a;
Lock(CRITICAL_SECTION *a):m_a(a){EnterCriticalSection(a);}
~Lock(){LeaveCriticalSection(m_a);}
};
现在的问题是我有控制流,我想要获取锁,做一些事情然后释放它,然后继续其他处理。所以我不想等待释放锁直到函数结束时破坏将开始。有没有办法做到这一点。
【问题讨论】:
-
锁需要在不同线程之间共享的实例。您将如何实现这一目标?
-
@DavidHeffernan 临界区需要在线程之间共享,但 Lock 不能。在线程之间共享锁违背了目的(并且违反了进入临界区的线程是唯一可以离开它的线程的规则)。
-
好的,我明白了。我没有仔细阅读代码。我从 Barmar 的原始答案开始,它创建了一个锁的实例而没有传递一个关键部分。应该检查Q中的代码。