采用QT5.15.2,操作系统为Ubuntu18.04(在Vmware下运行),
编写下面的两个通过QSystemSemaphore同步的进程,将会发现异常(已经确认该程序在window 10操作系统下没有问题)
服务端程序:
QSystemSemaphore InvalidDataSysSemaphore("TestKeyInvalid",1);
QSystemSemaphore ValidDataSysSemaphore("TestKeyValid");
quint32 ReceiveTimeCount = 0;
while(1)
{
if(ValidDataSysSemaphore.acquire())
{
ReceiveTimeCount++;
InvalidDataSysSemaphore.release();
if(ReceiveTimeCount>=32765)
qDebug("等待成功次数=%d", ReceiveTimeCount);//这里只能接收到32767次,后面不会接收,但重新启动程序将可能会莫明其妙继续收到信号量
}
else
{
qDebug("等待错误,已经等待次数=%d", ReceiveTimeCount);
break;
}
}
客户端程序:
QSystemSemaphore InvalidDataSysSemaphore("TestKeyInvalid");
QSystemSemaphore ValidDataSysSemaphore("TestKeyValid");
quint32 SendTimeCount = 0;
for(quint32 i=0;i<32769;i++)
{
if(InvalidDataSysSemaphore.acquire())
{
SendTimeCount++;
ValidDataSysSemaphore.release();
}
else
{
QString str = InvalidDataSysSemaphore.errorString();//当发送到第32768次的时候,发送错误,这里提示out of resources信息
qDebug("发送错误,已经发送次数=%d", SendTimeCount);
break;
}
}
出现发送了32767次后将无法发送信号量,不知道该如何解决?