作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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/
我是一名优秀的程序员,十分优秀!