互斥量 QMutex和QMutexLocker的对比
互斥量用于多线程的使用中,但是在多线程中可能会使用到同一个变量,在别人适用的时候需要进行等待。它等同于一把锁,在锁定的时候别人不能使用,别人进不来,但是在解锁以后大门就打开了,别的互斥量就可以来锁定他了。
QMutex
他是一个最基本的互斥量 lock()和unlock是一对小夫妻,他们俩必须同时存在,谁缺了谁都不能使用。lock()用于锁定互斥量 如果别的吸纳成也想锁定这个互斥量,那他就得等了,等到解锁这个互斥量。
Unlock() 用于解锁这个互斥量。
还有一种聪明的互斥量tryLock(),他会问问你是不是锁定了这个互斥量,如果没有锁定 那他会锁定这个互斥量。但是如果已经有别的线程锁定了这个互斥量骂他就直接走了,也不会在原地死等着。
QMutexLocker
他想比较于QMutex更为聪明,他在析构函数的时候会将传入的互斥量进行锁定,并且在析构函数的时候会将它进行解锁。但是可能会有问题他在什么时候会进行析构函数?他会在locker作用于结束的时候进行析构函数。
QMutexLocker locker(&mutex);
注意:这里的参数需要传入的是他的指针
QReadWriteLock
lockForRead() ; 以只读的方式进行锁定,但是如果在其他线程以写的方式锁定的时候,他就会被阻塞,但是他可以允许多个仅读的线程同时进行。
**lockForWrite() ;**以只写的方式进行锁定,其他的在背的线程以读写中的一种方式锁定的时候他都会被阻塞。
总结
这几个只是一些比较简单的互斥量,但是书上还有许多更为复杂一点的内容,大家需要可以自己去看qt5.9.
- 点赞
- 收藏
- 关注作者
评论(0)