- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们是 MFC 的几个新手,我们正在构建一个多线程应用程序。我们在 URL 中看到警告我们不要使用 CCriticalSection 的文章,因为它的实现被破坏了。我们很想知道是否有人有使用 CCriticalSection 的经验,您是否遇到任何问题或错误?如果我们使用 VC++ 2008 来构建我们的应用程序,CCriticalSection 是否可用并准备好生产?
http://www.flounder.com/avoid_mfc_syncrhonization.htm
谢谢
最佳答案
我认为那篇文章是基于对 CSingleLock 的用途以及如何使用它的根本误解。
您不能多次锁定同一个 CSingleLock,但您不应该这样做。 CSingleLock,顾名思义,用于锁定某物一次。
每个 CSingleLock 只管理某个其他对象上的一个锁(例如,您在构造期间传递给它的 CCriticalSection),目的是在 CSingleLock 超出范围时自动释放该锁。
如果你想多次锁定底层对象,你可以使用多个 CSingleLocks;您不会使用单个 CSingleLock 并尝试多次锁定它。
错误(他的例子):
CCriticalSection crit;
CSingleLock lock(&crit);
lock.Lock();
lock.Lock();
lock.Unlock();
lock.Unlock();
CCriticalSection crit;
CSingleLock lock1(&crit);
CSingleLock lock2(&crit);
lock1.Lock();
lock2.Lock();
lock2.Unlock();
lock1.Unlock();
CCriticalSection crit;
// Scope the objects
{
CSingleLock lock1(&crit, TRUE); // TRUE means it (tries to) locks immediately.
// Do stuff which needs the lock (if IsLocked returns success)
CSingleLock lock2(&crit, TRUE);
// Do stuff which needs the lock (if IsLocked returns success)
}
// crit is unlocked now.
关于multithreading - Ccriticalsection 在生产中是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4366105/
我们是 MFC 的几个新手,我们正在构建一个多线程应用程序。我们在 URL 中看到警告我们不要使用 CCriticalSection 的文章,因为它的实现被破坏了。我们很想知道是否有人有使用 CCri
这段代码有什么区别: ::EnterCriticalSection( &m_CriticalSection ); //... ::LeaveCriticalSection( &m_CriticalSe
在 MFC 应用程序中,我有 2 个线程访问我的数据,所以我使用 CCriticalSection Lock 和 Unlock 来保护我的数据不被 2 个线程同时访问。 从其中一个线程我需要锁定我的数
我正在将应用程序从 VC6 升级到 VS2010(旧版代码)。该应用程序在 VC6 中正常运行,但在将项目转换为 VS2010 后,我遇到了一些问题。退出应用程序时,程序会在尝试锁定进入临界区时中断。
这是场景。我有多个处理器线程读取一个值。只允许 1 个线程写入该值。由于设置的缘故,自然而然,在写入过程中没有人可以读取。因此,当 1 个人正在写入新值时,CCriticalSection 将锁定所有
为此,我已经尝试修复/寻找一个小时左右的解决方案。基本上我有: CCriticalSection pCS; 在类声明中,然后我像这样使用 CSingleLock: CSingleLock pSL(&p
我必须使用 MFC/C++ 编写一个简单的线程程序来进行 uni 分配。 我有一个简单的场景,我有一个工作线程,它执行一个函数: UINT createSchedules(LPVOID param)
我是一名优秀的程序员,十分优秀!