- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想知道关于 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/
我有一个属于某个类的函数,在这个函数中,函数开头有一个 mutex.lock,返回前有一个 mutex.unlock。现在遇到了mutex卡在locked状态的情况。如果此功能是我使用该互斥锁锁定和解
给定以下代码: #include #include #include #include #include #include #include #include #include #i
假设有如下QT代码(QT 5.3.1): void SenderClass::runSignal() { emit mySignal(); } void ReceiverClass::Rece
从不同的线程写入共享变量,我计划使用 QMutex,如果我将互斥变量声明为外部变量,我可以使用它在来自不同源文件的单独两个函数中进行读写吗? 喜欢 header.hpp extern QMutex m
我通过通常受相应互斥锁保护的公共(public)可访问成员变量来命令我的线程。 我的问题是:如果单个变量在写访问期间受互斥量保护它是否也应该在读取访问期间受到保护,还是我可以简单地读取它? 示例: 一
我正在尝试使用递归 QMutex,我阅读了 QMutex 类引用,但我不明白如何去做,有人可以给我一个例子吗?我需要一些方法来锁定可以在调用锁定方法之后或之前解锁的 QMutex。如果递归互斥不是这种
我是 Qt 的新手,我正在寻找 Qt 中的多线程。 正如我在 Qt Documents 中了解到的那样,我为两个线程定义了两个类: #include #include class thread_a
我只想实现如下代码。 QString Class1::getNonce() { //if some thread is getting nonce wait here until it fin
我已经包含了 QMutex header 并使用它,如下所示。但是我收到以下错误: error C2146: syntax error : missing > ';' before identifie
你好,我在用 qmutex 掌握 qthread 时遇到了问题——通常如何使用它——学习它我正在尝试创建限制为 8,000,000 的质数搜索器,但即使我使用给定的代码作为基础,我也失败了对于类似的例
从多个线程调用以下追加函数。我不希望数据重新写入追加,因为计数器尚未递增。 这会暂停所有进入的线程,除了当前使用 Append 的线程吗?或者其他线程会继续运行而不附加数据吗? 互斥量是否需要是“ST
我发现即使是对 QMutex 的简单等待也会导致断言。我可能做错了什么? QMutex mutex; SyncMgr::SyncMgr(QObject *parent) : QObject(paren
有没有人知道如何在不使用函数的情况下检查 QMutex 是否被锁定: bool QMutex::tryLock() 我不想使用 tryLock() 的原因是因为它做了两件事: 检查互斥锁是否被锁定。
在 Qt 文档中关于 QMutex据说: (...) When you call lock() in a thread, other threads that try to call lock() i
我有一个非常简单的情况:我在一个线程中有一个高速数据生成器,该线程生成其中包含[可变长度]元素的缓冲区。一旦缓冲区被填满,我就拥有一个将其写入磁盘的使用者。 现在,如果尚未由使用者线程写入缓冲区,则需
我有一个 C++ Qt 程序,它使用 QThread 和使用 QMutex 和 QWaitCondition 实现的暂停/恢复机制。这就是它的样子: MyThread.h: class MyThrea
我正在尝试向我的 Qt 应用程序添加多个线程,但是当它执行这个线程时,程序就崩溃了,我得到了一个错误 QThread: Destroyed while thread is still running
我想知道关于 Mutex 的哪种用法更好。我想到的两种用法是: 1) Qlist getList() { QMutexLocker locker(&m_mutex);
我有 QMutex m_mutex; 作为我类(class)中的私有(private)字段,我尝试使用其中一种方法中的 QMutexLocker 锁定它,但是当我尝试构建它时,我得到 C2530 错误
我正在GDB中运行我的程序。我的程序需要为其工作创建16个线程。所有这些都很好。最后我得到了错误QMutex::lock: Deadlock detected in thread 0xfe8这是GDB
我是一名优秀的程序员,十分优秀!