Linux中超时程序,请求、响应与超时机制详解

请求、响应与超时机制详解

在C/S软件模型中,往往都遵循这请求和响应的机制,而且往往还伴随着超时控制。即:A发送请求,然后等待B的响应,同时开始超时计时,如果在超时时间内成功接收到响应,则结束等待和计时。如果到了超时时间还没有接收到响应,则结束等待同时此次通讯失败。

我们站在A端来设计。

A发送通讯请求,然后进入等待状态。此时常见的操作就是将当前线程挂起(suspend)。让挂起线程进入就绪状态有两个条件:超时或正确响应。当线程重新运行后,根据唤醒的方式不一样,执行不同的操作。如果是超时,则可能需要中断此次操作,然后上报错误信息。如果是正确响应,则结束超时计时,同时继续执行下一次传输。

这种模式我使用三种环境来说明:

- ucos ii(freeRTOS)

- linux

- qt5

ucos适用于低端嵌入式

linux适用于高端嵌入式和服务器

qt5适用于桌面上位机和客户端

ucos ii实现

ucos实现起来很简单,使用post/pend系列函数可以轻松实现,因为这类函数本身就带有超时控制。

INT8U OSMboxPost(OS_EVENT *pevent,void *pmsg);

INT8U OSMboxPend(OS_EVENT *pevent,INT32U timeout,INT8U *perr);

所以使用信号量或者邮箱能够很轻松的实现上面的要求。

linux实现

linux的线程同步可以使用条件变量,条件变量需要配合互斥锁使用。

互斥锁:

- pthread_mutex_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值