Qt 这是否意味着我需要一个全局互斥变量
我需要实现一个互斥锁,它有两种工作方式:1。跨多个类保护资源,以及2。保护资源不受作为插槽且可能是可重入的类中的方法的影响。例如(伪C++):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被
是的,但是在锁定与某个范围相关的情况下,您应该使用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()
}
}