在Qt中,你可以使用QMutex类来实现互斥量(Mutex)。下面是一个简单的示例代码:
#include <QCoreApplication>
#include <QDebug>
#include <QThread>
#include <QMutex>
// 定义全局变量和互斥量
int globalVariable = 0;
QMutex mutex;
class MyThread : public QThread {
public:
void run() override {
// 在这里执行需要互斥访问的代码块
for (int i = 0; i < 5; ++i) {
mutex.lock(); // 上锁
qDebug() << "Thread" << QThread::currentThreadId() << ": Global variable before update:" << globalVariable;
++globalVariable; // 修改全局变量
qDebug() << "Thread" << QThread::currentThreadId() << ": Global variable after update:" << globalVariable;
mutex.unlock(); // 解锁
sleep(1);
}
}
};
int main(int argc, char* argv[]) {
QCoreApplication app(argc, argv);
MyThread thread1;
MyThread thread2;
thread1.start();
thread2.start();
thread1.wait();
thread2.wait();
return app.exec();
}
在上述代码中,我们定义了一个全局变量 globalVariable
和一个 QMutex
对象 mutex
。然后,在多个线程的 run()
函数中,通过调用 mutex.lock()
来上锁,确保只有一个线程能够进入临界区进行访问,并在操作完成后通过 mutex.unlock()
进行解锁。
这样做可以确保多个线程在修改共享资源时的互斥性,避免了竞态条件(Race Condition)的问题。
请注意,在使用互斥量时需要谨慎设计,避免死锁等问题。同时,在跨线程访问共享资源时要确保数据的一致性和安全性。
希望以上信息能对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问