linux 之 等待队列

1、等待队列由等待队列头和队列节点构成,当进程要获得某一资源而暂时不能得到时候,进程可以进入睡眠状态

内核为此要生成一个队列节点,并将睡眠的进程挂到等待队列中。


2、等待队列头wait_queue_head_t

struct __wait_queue_head {

         spinlock_t lock;

         struct list_head task_list;

};

typedef struct __wait_queue_head wait_queue_head_t ;

spinlock lock 是用来在对等待队列访问时做互斥操作的自旋锁。

task_list 是双向链表,用来管理睡眠在此等待队列的进程。


3、等待队列头的初始化

DECLARE_WAIT_QUEUE_HEAD : 完成等待队列头的静态定义和初始化。

init_waitqueue_head :动态初始化一个等待队列头。


4、等待队列节点

typedef struct __wait_queue wait_queue_t;

typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags,void *key);

struct __wait_queue {

          unsigned int flags;

          void *private;

          wait_queue_func_t func;

          struct list_head task_list;

}

flags : 唤醒等待队列上的进程时,该标志会影响唤醒操作的行为模式。

private : 指向睡眠的进程的task_struct结构体。

func : 该节点上的进程被唤醒时执行的唤醒函数。

task_list : 将个个节点链成链表。


5、等待队列节点的初始化

DECLARE_WAIT_QUEUE(name, tsk) : 静态定义和初始化。

init_waitqueue_entry(wait_queue_t *q , struct task_struct *p) :动态初始化一个队列节点


6、等待队列的操作:

TODO


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值