gpt4 book ai didi

c++ - 在同一个线程中多次锁定 CCriticalSection 是好习惯吗?

转载 作者:行者123 更新时间:2023-11-30 00:52:17 25 4
gpt4 key购买 nike

在 MFC 应用程序中,我有 2 个线程访问我的数据,所以我使用 CCriticalSection Lock 和 Unlock 来保护我的数据不被 2 个线程同时访问。

从其中一个线程我需要锁定我的数据两次,

线程 1,

  void ProcessFunction()
{
LockData(); // LockData and unLockData internally uses CCriticalSection
if( IsDataAvailable() )
{

}
UnLockData();
}

IsDataAvialable 已经有 LockData()

   IsDataAvailable()
{
LockData();
bool bAvailable = .....;
UnLockData();
return bAvialble;
}

线程 2

     void Delete() 
{
LockData();

....
UnLockData();
}

当我测试来自线程 1 的第二个锁时,没有等待第一个锁调用解锁,

但是一个线程的一个Lock正在等待另一个线程调用unlock。

我了解一个线程的锁将等待另一个线程的锁计数变为 0。但如果被同一个线程锁定,它不会等待同一个线程解锁。这是预期的行为。

我想知道在同一线程中多次调用 Lock 是否是一种好习惯?

最佳答案

您在这里寻找的艺术术语可能是“递归互斥体”或“可重入互斥体”。问题是,CCriticalSection 是否支持递归锁定(在同一线程中已经锁定时锁定)?据我所知(例如 http://microsoft.public.vc.mfc.narkive.com/gjxzQaHf/ccriticalsection ),确实如此。

这里有一个关于递归互斥锁的有趣讨论,其中说你不应该使用它们:http://www.zaval.org/resources/library/butenhof1.html

关于c++ - 在同一个线程中多次锁定 CCriticalSection 是好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com