QT线程同步

    多线程运行时,通常会访问同一个变量,同一个数据结构,或者同一段代码。因此,需要使用互斥技术来保护上述资源,确保多线程执行数据的正确性。

    实现有两种方法:

第1种:

         #include<QMutex>

         QMutexmutex;

         Function{

                  mutex.lock()

                   ... ... ...                                    //中间是需要保护的代码段

                  mutex.unlock();

        }

    

        这是还有一种简便方法:

 

        #include<QMutex>

        #include<QMutexLocker>

        QMutex mutex;

        Function{

       QMutexLocker locker(&mutex);      //此方法会从locker被声明开始,一直到它的作用//域结束的地方进行上锁,好处是不用手动解锁,避免造成死锁

         …                                                        //代码段

}

 

这种方法对线程进行上锁只能一个线程进行读或者写操作。


第2种:是使用QReadWriteLock;


    #include <QReadWriteLock>

    QReadWriteLock   readWriteLock;

    

    function{

        QWriteLocker writeLocker(&readWriteLock);//对writeLocker变量作用域内的代码段进行写锁,超过作用域后会自动进行解锁

        QReadLocker readLocker(&readWriteLock)//对readLocker变量作用域内的代码段进行读锁,超过作用域后会自动进行解锁

    }

这种方法的好处是在多个线程中可以同时进行读,但写只能有一个线程执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值