互斥量 QMutex和QMutexLocker的对比

举报
咚咚隆地咚 发表于 2022/09/23 14:10:30 2022/09/23
【摘要】 互斥量用于多线程的使用中,但是在多线程中可能会使用到同一个变量,在别人适用的时候需要进行等待。它等同于一把锁,在锁定的时候别人不能使用,别人进不来,但是在解锁以后大门就打开了,别的互斥量就可以来锁定他了。 QMutex他是一个最基本的互斥量 lock()和unlock是一对小夫妻,他们俩必须同时存在,谁缺了谁都不能使用。lock()用于锁定互斥量 如果别的吸纳成也想锁定这个互斥量,那他就得等...

互斥量用于多线程的使用中,但是在多线程中可能会使用到同一个变量,在别人适用的时候需要进行等待。它等同于一把锁,在锁定的时候别人不能使用,别人进不来,但是在解锁以后大门就打开了,别的互斥量就可以来锁定他了。

QMutex

他是一个最基本的互斥量 lock()和unlock是一对小夫妻,他们俩必须同时存在,谁缺了谁都不能使用。lock()用于锁定互斥量 如果别的吸纳成也想锁定这个互斥量,那他就得等了,等到解锁这个互斥量。

Unlock() 用于解锁这个互斥量。

还有一种聪明的互斥量tryLock(),他会问问你是不是锁定了这个互斥量,如果没有锁定 那他会锁定这个互斥量。但是如果已经有别的线程锁定了这个互斥量骂他就直接走了,也不会在原地死等着。

QMutexLocker

他想比较于QMutex更为聪明,他在析构函数的时候会将传入的互斥量进行锁定,并且在析构函数的时候会将它进行解锁。但是可能会有问题他在什么时候会进行析构函数?他会在locker作用于结束的时候进行析构函数。

QMutexLocker  locker(&mutex);

注意:这里的参数需要传入的是他的指针

QReadWriteLock

lockForRead() ; 以只读的方式进行锁定,但是如果在其他线程以写的方式锁定的时候,他就会被阻塞,但是他可以允许多个仅读的线程同时进行。
**lockForWrite() ;**以只写的方式进行锁定,其他的在背的线程以读写中的一种方式锁定的时候他都会被阻塞。

总结

这几个只是一些比较简单的互斥量,但是书上还有许多更为复杂一点的内容,大家需要可以自己去看qt5.9.

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。