QMutex的用法,看起来简洁,实际如此吗?

中才德创 2011-09-13 04:18:42
//.h
QMutex m_lock;

//.cpp
//问题1)构造中,如此赋值,是不是意味着防止重入?
, m_lock(QMutex::Recursive)

bool myClass::Fun1 ()
{
//问题2)函数开头弄个它,是不是保护后面的数据,执行中,别在Fun2中用它?
QMutexLocker locker(&m_lock);
...
...
}

bool myClass::Fun2 ()
{
//问题2)函数开头弄个它,是不是保护后面的数据,执行中,别在Fun1中用它?
QMutexLocker locker(&m_lock);
...
...
}
...全文
1965 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
中才德创 2011-09-16
  • 打赏
  • 举报
回复
一个互斥锁。 m_lock.lock() 就是申请这个锁,如果被正占用,它只能等待(直到占有者调用了m_lock.unlock()它才能继续)。

明白。
小蚊子 2011-09-14
  • 打赏
  • 举报
回复
同意楼上的观点。
dbzhang800 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hawkofwinter 的回复:]

locker保护点是其后必须被释放,下一个才允许进入?
“不管是Fun1本身,还是Fun1与Fun2之间?”

不知我表述是不是不够清晰?
[/Quote]
非常不够清晰 ^_^

和函数什么的没什么关系,就是一个互斥锁。 m_lock.lock() 就是申请这个锁,如果被正占用,它只能等待(直到占有者调用了m_lock.unlock()它才能继续)。找点多线程的资料先去看看吧。直接搜即可,概念性的东西,看的时候不用考虑语言
中才德创 2011-09-14
  • 打赏
  • 举报
回复
locker保护点是其后必须被释放,下一个才允许进入?
“不管是Fun1本身,还是Fun1与Fun2之间?”

不知我表述是不是不够清晰?
dbzhang800 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhu_xz 的回复:]

QMutexLocker locker(&m_lock);
这个的好处在于,如果函数有多个出口,你不用担心在某个出口忘记释放lock
[/Quote]
恩,这是和

m_lock.lock();
...
m_lock.unlock();

对比的优势,但楼主问得应该不是这个问题。
zhu_xz 2011-09-13
  • 打赏
  • 举报
回复
QMutexLocker locker(&m_lock);
这个的好处在于,如果函数有多个出口,你不用担心在某个出口忘记释放lock
dbzhang800 2011-09-13
  • 打赏
  • 举报
回复
1. 就是的构造函数初始化列表。不存在赋值、也不存在重不重入的问题。
2. 你理解的应该是对的,可是感觉你的叙述很别扭。可以看看多线程相关的东西(不一定是Qt相关的资料)

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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