等待队列

更新时间:2024-08-08 11:17

等待队列,是指linux系统中进程所组成的队列,就是需要其他事件的发生才会自己本身被唤醒的进程,也就是说这些进程本身是在等待其他某些进程为他 们提供进程发生的条件。他们是属于消费者的,但是他们要消耗的东西还没有产生,这些就是处于等待状态的进程,组成了等待队列。等待队列很容易使用, 尽管它的设计很是微妙, 但不需要知道它的内部细节。

操作方法

linux中的进程在系统执行的过程中会根据环境的不同而分成不同的状态。 根据各个进程状态的不同,从而分成了不同的队列,包括等待队列,就绪队列等。等待队列和就绪队列的用途都很大。

进程的状态主要有以下几种,Running---进程处 于运行(它是系统的当前进程)或者准备运行状态(它在等待系统将CPU分配给它)。Waiting---进程在等待一个事件或者资源。 Stopped---进程被停止,通常是通过接收一个信号。正在被调试的进程可能处于停止状态。Zombie(defunct)---僵死状态。

使用案例

编写Linux驱动程序到底如何使用等待队列呢

处理等待队列的最佳方式就是依照如下操作:

1. 声明一个struct wait_queue * 变量. 你需要为每一个可以让进程睡眠的事件预备这样一个变量. 这就是我建议你放在描述硬件特性数据结构中的数据项.

2. 将该变量的指针作为参数传递给不同的sleep_on和wake_up函数.

这相当容易. 例如, 让我们想象一下, 当进程读你的设备时, 你要让这个进程睡眠, 然后在某人向设备写数据后唤醒这个进程. 下面的代码就可以完成这些工作:

struct wait_queue *wq= NULL;

read_write_t sleepy_read(struct inode *inode, struct file *flip, char *buf, count_t count)

{

interruptible_sleep_on(&wq);

return 0;

}

read_write_t sleepy_write(struct inode *inode, struct file *flip, char *buf, count_t count)

{

wake_up_interruptible(&wq);

return count;

}

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}