发布于: 2023-10-9最后更新: 2023-10-9字数 00 分钟

Linux定时器的实现

比如TCP中发送一个ACK包后有一个超时等待,如何去做。
自己想的思路是做一个调度的时钟线程,去调度等待线程。
在Linux中,定时器的实现主要有两种方式:内核定时器和POSIX定时器。下面是它们的简单介绍:
  1. 内核定时器timer_list是Linux内核中的一种定时器,它在内核空间中实现。你可以通过init_timer初始化一个定时器,add_timer添加一个定时器,del_timer删除一个定时器。当一个定时器到期时,内核会调用该定时器的回调函数。
  1. POSIX定时器:POSIX定时器是在用户空间的定时器,它是按照POSIX.1b实时扩展标准设计的。你可以通过timer_create创建一个定时器,timer_settime设置一个定时器,timer_gettime获取一个定时器的剩余时间,timer_delete删除一个定时器。当一个POSIX定时器到期时,它会生成一个信号,你可以在信号处理程序中处理该事件。
在TCP中,如果你发送了一个ACK包,然后需要等待一段时间,你可以使用上述的任何一种定时器。一种可能的方法是,当你发送一个ACK包时,设置一个定时器。然后在定时器的回调函数或信号处理程序中检查是否收到了响应。如果没有收到响应,你可以重新发送ACK包,或者进行其他的错误处理。
例如,以下是一个使用内核定时器的简单示例:
这是一个非常基本的示例,实际的使用可能会更复杂,比如你可能需要在定时器的回调函数中访问共享数据,或者需要处理多个定时器。

通用知识集
通用知识集