Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Multithreading mutexlocker是否应该同时添加到两个函数中,在这两个函数中,它们试图从不同的线程访问和写入相同的变量?_Multithreading_Qt_Qmutex - Fatal编程技术网

Multithreading mutexlocker是否应该同时添加到两个函数中,在这两个函数中,它们试图从不同的线程访问和写入相同的变量?

Multithreading mutexlocker是否应该同时添加到两个函数中,在这两个函数中,它们试图从不同的线程访问和写入相同的变量?,multithreading,qt,qmutex,Multithreading,Qt,Qmutex,下面是一个全局变量: extern int i; 两个线程A&B尝试访问并写入变量i,线程A中的函数如下所示: void funA(int *i) { QMutexLocker(&m_mutex); //to lock the process *i += 5; } 和线程B进程函数: void funB(int *i) { QMutexLocker(&m_mutex); //**should I add this?** *i -= 2; }

下面是一个全局变量:

extern int i;
两个线程A&B尝试访问并写入变量i,线程A中的函数如下所示:

void funA(int *i)
{
    QMutexLocker(&m_mutex);  //to lock the process
    *i += 5;
}
和线程B进程函数:

void funB(int *i)
{
    QMutexLocker(&m_mutex);  //**should I add this?**
    *i -= 2;
}

有两个线程只访问一个变量,我应该将QMutexLocker添加到两个函数中还是只添加一个?我可以添加一个吗?

是的,您应该在两个函数中都使用
QMutexLocker

在哪里定义了m_互斥?对i的所有访问都必须是相同的实例。我还避免使用全局变量,并使互斥和变量成为某个类的成员。