• Qt QMutex的一点理解


    在Qt的多线程控制中,互斥量的访问最简单的控制是添加一个mutex锁,对一个函数或者变量锁定。

    一直不理解QMutex中的锁是如何运行的,或者说如何利用这个锁将变量进行锁定。官方实例是这样的:

     1 QMutex mutex;
     2 int number = 6;
     3 
     4 void method1()
     5 {
     6     mutex.lock();
     7     number *= 5;
     8     number /= 4;
     9     mutex.unlock();
    10 }
    11 
    12 void method2()
    13 {
    14     mutex.lock();
    15     number *= 3;
    16     number /= 2;
    17     mutex.unlock();
    18 }

      还是看不懂为什么会锁住变量,主要是没办法根据这个试例进行实验,后经过各种查资料研究一遍遍的试代码,还有从别人博客中的只言片语中,发现有这么一句话:“QMutex::lock()获取一个锁”。

      这说明只有一个锁,只能被一个QMutex得到,如果QMutex得不到这个锁,那它将不会执行紧随其后的代码,也就是在两个进程代码中需要共用一个QMutex类的实例,这样才能保证该实例是否获取到一个锁或者得不到一个锁。

      如果QMutex::lock()得不到这个锁,那么它将会一直等直到得到该锁为止,而另一个方法QMutex::tryLock()可以检测当前是否可以得到这个锁,如果可以得到则返回1,否则返回0(不会一直等,但如果可以得到锁,那就拿到锁,不会光判断而不获取锁),该函数只执行一次,不会一直等到得到锁为止。

  • 相关阅读:
    ecshop的详细安装步骤
    php+mysql 除了设置主键防止表单提交内容重复外的另一种方法
    strcmp
    map set区别
    ++i vs i++
    stl vector erase
    user initialization list vs constructor assignment
    default constructor,copy constructor,copy assignment
    memset
    strcpy vs memcpy
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14656930.html
Copyright © 2020-2023  润新知