gpt4 book ai didi

c++ - QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停它们的操作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:31 26 4
gpt4 key购买 nike

从多个线程调用以下追加函数。我不希望数据重新写入追加,因为计数器尚未递增。

这会暂停所有进入的线程,除了当前使用 Append 的线程吗?或者其他线程会继续运行而不附加数据吗?

互斥量是否需要是“STATIC”或者每个实例都知道暂停操作?

如果我不想打嗝,我假设我必须建立一个缓冲区来备份日志数据?

void classA::Append(int _msg)
{
static int c = 0;
QMutex mutex; //need to be static so other threads know to suspend?
//there are 10 threads creating an instantiation of classA or an object of classA

mutex.lock();

intArray[c] = _msg;
c++;

mutex.unlock();
}

最佳答案

不,它不需要是static,只需让它成为您的classA 中的成员,您也可以查看QMutexLocker。范围锁定和解锁互斥体:

void classA::Append(int _msg)
{
static int c = 0;
QMutexLocker locker(&mutex); // mutex is a QMutex member in your class

intArray[c] = _msg;
c++;

/*mutex.unlock(); this unlock is not needed anymore, because QMutexLocker unlocks the mutex when the locker scope ends, this very useful especially if you have conditional and return statements in your function*/
}

关于c++ - QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停它们的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com