等待队列,是指linux系统中进程所组成的队列,就是需要其他事件的发生才会自己本身被唤醒的进程,也就是说这些进程本身是在等待其他某些进程为他 们提供进程发生的条件。他们是属于消费者的,但是他们要消耗的东西还没有产生,这些就是处于等待状态的进程,组成了等待队列。等待队列很容易使用, 尽管它的设计很是微妙, 但不需要知道它的内部细节。 [1]
- 中文名
- 等待队列
- 特 点
- 进程所组成的队列
- 系 统
- linux系统
- 条 件
- 需要其他事件的发生
操作方法
播报编辑
linux中的进程在系统执行的过程中会根据环境的不同而分成不同的状态。 根据各个进程状态的不同,从而分成了不同的队列,包括等待队列,就绪队列等。等待队列和就绪队列的用途都很大。 [1]
进程的状态主要有以下几种,Running---进程处 于运行(它是系统的当前进程)或者准备运行状态(它在等待系统将CPU分配给它)。Waiting---进程在等待一个事件或者资源。 Stopped---进程被停止,通常是通过接收一个信号。正在被调试的进程可能处于停止状态。Zombie(defunct)---僵死状态。 [1]
使用案例
播报编辑
处理等待队列的最佳方式就是依照如下操作: [1]
这相当容易. 例如, 让我们想象一下, 当进程读你的设备时, 你要让这个进程睡眠, 然后在某人向设备写数据后唤醒这个进程. 下面的代码就可以完成这些工作: [1]
struct wait_queue *wq= NULL;
read_write_t sleepy_read(struct inode *inode, struct file *flip, char *buf, count_t count)
{
printk(KERN_DEBUG "process %i (%s) going to sleep\n", current->pid, current->comm);
interruptible_sleep_on(&wq);
printk(KERN_DEBUG "awoken %i (%s)\n", current->pid, current->comm);
return 0;
}
read_write_t sleepy_write(struct inode *inode, struct file *flip, char *buf, count_t count)
{
printk(KERN_DEBUG "process %i (%s) awakening the readers\n", current->pid, current->comm);
wake_up_interruptible(&wq);
return count;
} [1]
