下面的用于多线程的代码有问题吗?我自己没把握.

捕鲸叉 2013-07-08 10:45:43

bool CHardware::IsReady()
{
bool isready;
m_CriticalSection.Lock();
isready = m_IsReady;
m_CriticalSection.Unlock();
return isready;
}
...全文
62 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gg606 2013-07-08
  • 打赏
  • 举报
回复
就这个函数来讲,没有任何问题,甚至读取一个值是不需要使用关键段的。 只是这个函数的用处令人生疑,因为它所测试的结果等到使用时可能又变了。
m_CriticalSection.Lock();
if (m_IsReady)
// 应该把要做的事情放在这里
m_CriticalSection.Unlock(); 
zhousitiaoda 2013-07-08
  • 打赏
  • 举报
回复
假如m_IsReady的值是false,m_CriticalSection.Unlock()后另一个线程把m_IsReady的值更新为true。此时IsReady返回的是个false。。能接受这种结果就没问题,不能接受就有问题。 封装个类,在析构函数里Unlock是不是更好?使用的时候CAutoLock autoLock;autoLock.lock();像这样。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧