下面是一个简单的示例代码,演示了如何使用Qt中的信号量(QSemaphore)来控制线程之间的并发访问。
#include <QtCore>
// 定义全局变量和信号量对象
int counter = 0;
QSemaphore semaphore(1); // 设置初始值为1的信号量
// 自定义线程类
class MyThread : public QThread {
public:
void run() override {
for (int i = 0; i < 5; ++i) {
// 获取信号量资源
semaphore.acquire();
// 访问共享资源
++counter;
qDebug() << "Thread ID:" << currentThreadId() << "Counter:" << counter;
// 释放信号量资源
semaphore.release();
msleep(500);
}
}
};
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();
}
在上述示例中,我们创建了两个自定义线程对象 thread1
和 thread2
。每个线程都会通过信号量来获取和释放资源。
运行程序后,你将会看到两个线程交替地访问和更新计数器变量,并在输出中显示其当前值。由于信号量的存在,只有一个线程能够访问计数器变量,保证了数据操作的互斥性。
请注意,在实际应用中可能会有更复杂的场景和需求,需要合理地使用信号量来保护共享资源和控制并发访问。
内容由零声教学AI助手提供,问题来源于学员提问