QSystemSemaphore 系統級信號量
在之前的一篇文章中,我們講過了QSemaphore類,其可以用於同步多線程。而今天要講到的這個類,根據名字就可以猜測到,其可以在整個系統中使用,即它既可以用於多線程,也可以用於多線程。當然,這也意味著,QSystemSemaphore類是一個比較重量級的類,所以,除非在同步多進程的情況下,否則不應該使用該類。其他方面,該類和QSemaphore均相同,操作也相同。
我們先來看一下該類的構造函數:
QSystemSemaphore::QSystemSemaphore(const QString &key, int initialValue = 0, AccessMode mode = Open)
新建兩個Qt控制臺程序SystemSem1和SystemSem2,代碼如下:
SystemSem1:
#include <QCoreApplication>
#include <QSystemSemaphore>
#include <QDebug>
#include <QThread>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSystemSemaphore sem("sem", 1, QSystemSemaphore::Create);
{
sem.acquire();
qDebug() << QCoreApplication::applicationPid();
QThread::sleep(1);
sem.release();
}
return a.exec();
}
SystemSem2:
#include <QCoreApplication>
#include <QSystemSemaphore>
#include <QDebug>
#include <QThread>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSystemSemaphore sem("sem", 1, QSystemSemaphore::Open);
while(true)
{
sem.acquire();
qDebug() << QCoreApplication::applicationPid();
QThread::sleep(1);
sem.release();
}
return a.exec();
}
我們在SystemSem1中創建信號量,在SystemSem2中打開信號量。
啟動這兩個程序,可以看到,每隔1秒,兩個程序會交替輸出各自的進程ID。
---------------------
作者:求道玉
來源:CSDN
原文:https://blog.csdn.net/Amnes1a/article/details/70158300
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
QSystemSemaphore 系統級信號量