QT开发中文网

信号量代码实例

下面是一个简单的示例代码,演示了如何使用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();
}

在上述示例中,我们创建了两个自定义线程对象 thread1thread2。每个线程都会通过信号量来获取和释放资源。

运行程序后,你将会看到两个线程交替地访问和更新计数器变量,并在输出中显示其当前值。由于信号量的存在,只有一个线程能够访问计数器变量,保证了数据操作的互斥性。

请注意,在实际应用中可能会有更复杂的场景和需求,需要合理地使用信号量来保护共享资源和控制并发访问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=10358

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?