等待队列

     等待队列有很多用途,尤其用在中断处理、进程同步以及定时。等待队列实现了再事件上的条件等待:希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制权。因此,等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。

等待队列由双向链表实现,其元素包括指向进程描述符的指针,每个等待队列都有一个等待队列头,等待队列头是一个类型为wait_queue_head_t的数据结构

Struct __wait_queque_head

{

      Spinlock_t lock;

      Struct list_head task_list;

};

Typedefstruct __wait_queque_head wait_queque_head_t;

同步是通过等待队列头的lock自旋达到的,task_list字段是等待进程链表的头

等待队列链表中的元素类型:

Struct __wait_queue

{

      Unsigned int flags;

      Struct task_struct * task;

      Wait_queue_func_t func;

      Struct list_head task_list;

};

Typedefstruct  __wait_queue wait_queue_t;

等待队列链表中的每个元素代表一个睡眠进程,该进程等待某一事件的发生,它的描述符放在task字段中,task_list字段中包含的是指针,由这个指针把一个元素连接到等待相同事件的进程链表中。

有两种睡眠进程:互斥进程(等待队列元素的flags字段为1)由内核有选择的唤醒,而非互斥进程(flags字段为0),总是由内核在事件发生时唤醒。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值