file_operation_poll
poll机制 使用方法
使用非阻塞IO的应用程序通常会使用select和poll系统调用查询是否可对设备进行无阻塞的访问,这两个系统调用最终会引发设备驱动中poll函数被执行。
atomic_t介绍
atomic_t
: 这是一个用于定义原子变量的类型。原子变量是一种特殊的变量,可以在多线程环境下安全地进行操作,而不需要使用锁来防止竞争条件。atomic_t
通常用于存储整数值,并且提供了一组原子操作函数来保证操作的原子性。
ATOMIC_INIT(0)
: 这是一个宏,用于初始化原子变量。在这种情况下,ATOMIC_INIT(0)
将 gstSub1gMsgFlag
初始化为 0。原子变量的初始化通常需要使用这个宏,而不是直接赋值,因为这样可以保证初始化过程的线程安全性。
DECLARE_WAIT_QUEUE_HEAD介绍
用于在linux内核编程中声明和初始化等待队列(wait queue)头的宏。等待队列用于在某些条件满足之前让线程处于睡眠状态,并且在条件满足的时候唤醒他们。常用于阻塞式等待。
1 | DECLARE_WAIT_QUEUE_HEAD(msg_wait) |
wake_up_interruptible介绍
用于唤醒等待队列中处于可中断睡眠状态的进程。进程被唤醒后,会从睡眠状态恢复并执行对应任务(.poll绑定函数)。
poll_wait(file, &msg_wait, wait);介绍
将当前进程mgs_wait添加到指定的等待队列中。
poll函数返回事件的状态。