在Qt中,可以使用QMutex
类实现互斥锁的功能。以下是一个示例代码,演示了如何在Qt中使用互斥锁:
#include <QCoreApplication>
#include <QMutex>
#include <QThread>
#include <QDebug>
// 全局变量
int counter = 0;
QMutex mutex;
class Worker : public QThread
{
public:
void run() override
{
for (int i = 0; i < 10000; ++i)
{
// 使用互斥锁来保护共享资源
mutex.lock();
++counter;
mutex.unlock();
}
}
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Worker worker1;
Worker worker2;
worker1.start();
worker2.start();
// 等待工作线程完成
worker1.wait();
worker2.wait();
qDebug() << "Counter: " << counter;
return app.exec();
}
在上面的示例中,我们创建了两个工作线程(Worker
),每个线程都会进行10000次自增操作,并且通过互斥锁保护共享资源 counter
。运行该程序,最终输出的结果应该是20000。
通过 mutex.lock()
和 mutex.unlock()
函数来控制对共享资源的访问,确保同一时间只有一个线程能够修改它。
请注意,在使用互斥锁时要小心避免死锁情况的发生。同时,请根据具体的需求考虑使用更高级别的锁,如QReadWriteLock
、QSemaphore
等,以满足不同的线程同步需求。
内容由零声教学AI助手提供,问题来源于学员提问