linux kernel 数据结构系列之(三)等待队列wait_queue

Linux内核的等待队列是非常重要的数据结构,在内核驱动中广为使用,它是以双循环链表为基础数据结构,与进程的休眠唤醒机制紧密相联,是实现异步事件通知、跨进程通信、同步资源访问等技术的底层技术支撑。

研究等待队列这个内核非常基础的数据结构,对于加深理解Linux非常有帮忙,等待队列有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t),两者都有一个list_head类型task_list。双向链表通过task_list将 等待队列头和一系列等待队列项串起来,源码如下所示。

struct __wait_queue_head

{

    spinlock_t lock; //用于互斥访问的自旋锁

    struct list_head task_list;

};

typedef struct __wait_queue_head wait_queue_head_t;

 

struct __wait_queue

{

    unsigned int flags;

    void *private; //指向等待队列的进程

    task_struct wait_queue_func_t func; //唤醒函数

    struct list_head task_list; //链表元素,将wait_queue_t挂到wait_queue_head_t

};

typedef struct __wait_queue wait_queue_t;

Reference:

  1.  源码解读Linux等待队列
  2.  Linux 进程控制——等待队列详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值