我想知道关于 Mutex 的哪种用法更好。我想到的两种用法是:
1)
Qlist getList()
{
QMutexLocker locker(&m_mutex);
return m_list;
}
for ( int i =0 ;i < getList.count ; i++)
{
obj = getList.at(i)
//some work
// on obj
}
2)
Qlist getList()
{
return m_list;
}
{
QMutexLocker locker(&m_mutex);
for ( int i =0 ;i < getList.count ; i++)
{
obj = getList.at(i)<br>
//some work
// on obj
}
}
简而言之,是在任何使用列表的地方保护它更好,还是在返回列表的 getlist 函数中放置一个互斥量更好?
最佳答案
我不明白你为什么要在 getter 中锁定互斥量。您所做的一切都是在制作 QList
浅拷贝时阻止其他 protected 部分运行。
在 QList
上执行操作时需要锁定互斥锁,这些操作需要与对 QList
的任何其他访问隔离开来。您在循环中对 QList
所做的工作的性质以及其他线程如何同时与它交互将决定您是否需要锁定它。
如果在循环期间没有其他线程可以更改元素的数量,那么只在循环体内围绕您对每个元素所做的工作进行锁定可能是安全的(这仍然取决于其他线程可能对内容执行的操作) QList
),否则在循环体外部锁定。仅锁定 setter/getter 不会有任何效果。
关于c++ - QMutexLocker 和 QMutex 哪个更好用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090706/