网站建设项目工作分解,加工平台,wordpress无法找到该页,写出网站建设步骤消息队列#xff1a;提供一种从一个进程向另一个进程发送一个数据块的方法。与FIFO相比#xff0c;消息队列的优势在于#xff0c;它独立于发送和接收进程而存在。 1.链表式结构组织#xff0c;存放于内核。 2.通过队列标识来引用。 3.通过一个数据类型来索引指定的数据。 …
消息队列提供一种从一个进程向另一个进程发送一个数据块的方法。与FIFO相比消息队列的优势在于它独立于发送和接收进程而存在。 1.链表式结构组织存放于内核。 2.通过队列标识来引用。 3.通过一个数据类型来索引指定的数据。 Linux内核的等待队列Wait Queue是重要的数据结构与进程调度机制紧密相关联可以用来同步对系统资源的访问、异步事件通知、跨进程通信IPC等。 在Linux驱动程序中可以使用等待队列Wait Queue来实现阻塞进程的唤醒。 1.定义“等待队列头部” wait_queue_head_t my_queue; 2.初始化“等待队列头部” init_waitqueue_head(my_queue); 而下面的DECLARE_WAIT_QUEUE_HEAD宏可以作为定义并初始化等待队列头部的“快捷方式”。 DECLARE_WAIT_QUEUE_HEAD (name)
3.定义等待队列元素 DECLARE_WAITQUEUE(name, tsk) 该宏用于定义并初始化一个名为name的等待队列元素。 4.添加/移除等待队列 void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
add_wait_queue用于将等待队列元素wait添加到等待队列头部q指向的双向链表中而
remove_wait_queue用于将等待队列元素wait从由q头部指向的链表中移除。 5.等待事件 wait_event(queue, condition)
wait_event_interruptible(queue, condition)
wait_event_timeout(queue, condition, timeout)
wait_event_interruptible_timeout(queue, condition, timeout)
等待第1个参数queue作为等待队列头部的队列被唤醒而且第2个参数condition必须满足否则继续阻塞。wait_event和wait_event_interruptible的区别在于后者可以被信号打断而前者不能。加上_timeout后的宏意味着阻塞等待的超时时间以jiffy为单位在第3个参数的timeout到达时不论condition是否满足均返回。 函数原型 #define wait_event_interruptible(wq, condition)
({
int __ret 0;
if (!(condition))
__wait_event_interruptible(wq, condition, __ret);
__ret;
})
wq等待队列创建等待队列查看
condition当是0时候进程进入休眠是1的时候继续往下运行 6.唤醒队列 void wake_up(wait_queue_head_t *queue);
void wake_up_interruptible(wait_queue_head_t *queue);
wake_up应该与wait_event或wait_event_timeout成对使用而wake_up_interruptible则应与wait_event_interruptible或wait_event_interruptible_timeout成对使用。wake_up可唤醒处于TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE的进程而wake_up_interruptible只能唤醒处于TASK_INTERRUPTIBLE的进程。