gpt4 book ai didi

c++ - Qt同步障碍?

转载 作者:可可西里 更新时间:2023-11-01 15:09:18 26 4
gpt4 key购买 nike

是否有 Qt 等效于同步障碍?第一个 N-1 个调用者 wait 阻塞和第 N 个调用者 wait 导致它们全部释放的类型。

最佳答案

不,但是您可以使用 QWaitCondition 设置这些障碍:

#include <QMutex>
#include <QWaitCondition>
#include <QSharedPointer>

// Data "pimpl" class (not to be used directly)
class BarrierData
{
public:
BarrierData(int count) : count(count) {}

void wait() {
mutex.lock();
--count;
if (count > 0)
condition.wait(&mutex);
else
condition.wakeAll();
mutex.unlock();
}
private:
Q_DISABLE_COPY(BarrierData)
int count;
QMutex mutex;
QWaitCondition condition;
};

class Barrier {
public:
// Create a barrier that will wait for count threads
Barrier(int count) : d(new BarrierData(count)) {}
void wait() {
d->wait();
}

private:
QSharedPointer<BarrierData> d;
};

使用示例代码:

class MyThread : public QThread {
public:
MyThread(Barrier barrier, QObject *parent = 0)
: QThread(parent), barrier(barrier) {}
void run() {
qDebug() << "thread blocked";
barrier.wait();
qDebug() << "thread released";
}
private:
Barrier barrier;
};

int main(int argc, char *argv[])
{
...
Barrier barrier(5);

for(int i=0; i < 5; ++i) {
MyThread * thread = new MyThread(barrier);
thread->start();
}
...
}

关于c++ - Qt同步障碍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637374/

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