Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 这是否意味着我需要一个全局互斥变量_Qt_Qtcore_Qmutex - Fatal编程技术网

Qt 这是否意味着我需要一个全局互斥变量

Qt 这是否意味着我需要一个全局互斥变量,qt,qtcore,qmutex,Qt,Qtcore,Qmutex,我需要实现一个互斥锁,它有两种工作方式:1。跨多个类保护资源,以及2。保护资源不受作为插槽且可能是可重入的类中的方法的影响。例如(伪C++): 我读到其中说场景2已经涵盖,因为A.aaa被A.aaa中断的情况已经得到处理(Qt/OS知道它是同一个被保护的资源,对吗 至于A.aaa和B.bbb保护同一个资源,我认为这是行不通的,因为Qt/OS不知道它是同一个资源/互斥体?这是否意味着变量互斥体需要是全局的,以便多个不相关的类可以安全地访问它 我读过这篇帖子,上面说场景2已经涵盖了,因为A.aaa被

我需要实现一个互斥锁,它有两种工作方式:1。跨多个类保护资源,以及2。保护资源不受作为插槽且可能是可重入的类中的方法的影响。例如(伪C++):

  • 我读到其中说场景2已经涵盖,因为A.aaa被A.aaa中断的情况已经得到处理(Qt/OS知道它是同一个被保护的资源,对吗

  • 至于A.aaa和B.bbb保护同一个资源,我认为这是行不通的,因为Qt/OS不知道它是同一个资源/互斥体?这是否意味着变量互斥体需要是全局的,以便多个不相关的类可以安全地访问它

  • 我读过这篇帖子,上面说场景2已经涵盖了,因为A.aaa被A.aaa中断的情况已经得到了处理(Qt/OS知道它是同一个被保护的资源,对吗

    是的,但是在锁定与某个范围相关的情况下,您应该使用QutoExLokC++来避免忘记解锁错误。这在C++中被调用。

    严格地说,是QMutex负责锁定资源

    至于A.aaa和B.bbb保护同一个资源,我认为这是行不通的,因为Qt/OS不知道它是同一个资源/互斥体?这是否意味着变量互斥体需要是全局的,以便多个不相关的类可以安全地访问它


    这是一种罕见的情况,但确实如此。尽管您可能希望将全局变量包装为一种类型,如自定义结构。

    互斥体与受保护的资源相关联,而不是与访问此资源的类相关联。因此,在您的简单情况下,当资源是全局变量时,互斥体也应该是全局变量。操作系统对reso一无所知受保护的资源。在堆栈上创建的互斥体不与其他线程共享,不会保护任何内容。所有访问globalvar的线程都必须共享同一个互斥体实例。因此互斥体应该与要保护的数据位于同一范围内。谢谢-我将在下一步启动一个新线程来澄清这一点。包装全局变量的方法是什么在一个结构中你能为我做什么?
    Class A {
      function aaa() {
        QMutex mutex;
        mutex.lock();
        globalvar++;
        mutex.unlock()
      }
    }
    
    Class B {
      function bbb() {
        QMutex mutex;
        mutex.lock();
        globalvar++;
        mutex.unlock()
      }
    }