QT线程二(线程的同步).docx

QT线程二(线程的同步).docx

ID:58821392

大小:19.15 KB

页数:7页

时间:2020-10-25

QT线程二(线程的同步).docx_第1页
QT线程二(线程的同步).docx_第2页
QT线程二(线程的同步).docx_第3页
QT线程二(线程的同步).docx_第4页
QT线程二(线程的同步).docx_第5页
资源描述:

《QT线程二(线程的同步).docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、QT线程(二)---线程同步线程互斥       多线程运行时,通常会访问同一个变量,同一个数据结构,或者同一段代码。因此,需要使用互斥技术来保护上述资源,确保多线程执行的正确性。注:我们通常说某个函数是线程安全的,也就是因为该函数实现加入了线程互斥保护。        4.1、QMutex QMutex (RecursionMode mode =NonRecursive) ~QMutex ()voidlock ()mutex加锁,如果当前其他线程已对该mutex加锁了,则该调用被阻塞直到其他线程释放

2、该mutex。booltryLock ()mutex加锁,和lock不同的是,如果当前其他线程已对该mutex加锁了,则该调用会立即返回,而不被阻塞。booltryLock (int timeout )同tryLock,和tryLock不同的是,如果当前其他线程已对该mutex加锁了,则该调用会等待一段时间,直到超时或者其他线程释放了mutex。voidunlock ()mutex解锁,释放被锁住的资源。        Mutex有两种模式,用户可以在构造函数参数中指定。      ConstantV

3、alueDescriptionQMutex::Recursive1Inthismode,athreadcanlockthesamemutexmultipletimesandthemutexwon'tbeunlockeduntilacorrespondingnumberof unlock()callshavebeenmade.该模式下,一个线程可以对mutex多次lock,直到相应次数的unlock,调用后,该mutex才真正被unlock。QMutex::NonRecursive0Inthismode

4、,athreadmayonlylockamutexonce.该模式下,mutex只能被lock一次。 实例:QMutexmutex;intnumber=6; voidmethod1(){    mutex.lock();    number*=5;    number/=4;    mutex.unlock();} voidmethod2(){    mutex.lock();    number*=3;    number/=2;    mutex.unlock();}        4.1、QMu

5、texLocker  QMutexLocker (QMutex* mutex ) ~QMutexLocker ()QMutex*mutex ()constvoidrelock ()voidunlock ()        QMutexLocker实际上是对QMutex使用的一种简化。例如以下场景:         当某段代码存在多个分支,在对QMutex加锁后,需要在不同的分支路径下都执行解锁操作,才能保证Mutex关联的资源能被其他线程继续访问,否则就出现死锁。       QMutexLocker

6、接收一个QMutex作为参数,当创建QMutexLocker对象时,就对关联的Mutex进行了Lock操作,直到该QMutexLocker对象被销毁,相关的QMutex才被Unlock。 实例:       直接使用QMutex:intcomplexFunction(intflag){    mutex.lock();     intretVal=0;     switch(flag){    case0:    case1:        mutex.unlock();        returnm

7、oreComplexFunction(flag);    case2:        {            intstatus=anotherFunction();            if(status<0){                mutex.unlock();                return-2;            }            retVal=status+flag;        }        break;    default:        i

8、f(flag>10){            mutex.unlock();            return-1;        }        break;    }     mutex.unlock();    returnretVal;} 使用QMutexLocker:intcomplexFunction(intflag){    QMutexLockerlocker(&mutex);     intretVal=0;     switch(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。