1、工作队列的使用
按惯例,在介绍工作队列如何实现之前,先说说如何使用工作队列实现下半部。
步骤一、定义并初始化工作队列:
创建工作队列函数:
struct workqueue_struct *create_workqueue(const char *name)
函数传参是内核中工作队列的名称,返回值是workqueue_struct结构体的指针,该结构体用来维护一个等待队列。
我的代码如下:
struct workqueue_struct * ZP1015_wq; //定义工作队列
ZP101...
分类:
系统相关 时间:
2015-06-03 17:48:40
阅读次数:
172
线程间协作的两种方式:wait、notify、notifyAll和Condition
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让...
分类:
编程语言 时间:
2015-06-01 13:22:53
阅读次数:
222
linux驱动程序中的异步编程
A
前面介绍的等待队列和轮询编程提供了较好的解决设备访问的机制,但是这些机制都
是由应用程序发起的,都需要应用程序主动访问设备。更完美的方式是由驱动程序主
动通知应用程序,也就是说,当驱动程序满足某些条件后,会主动通知应用程序处理
,这些处理方式有些像面向对象编程的事件,而在linux内核使用的事件是接下来要介
绍的信号。
#include...
分类:
系统相关 时间:
2015-05-29 12:07:48
阅读次数:
146
等待队列工作过程就是睡眠和唤醒的过程
使用:
static DECLARE_WAIT_QUEUE_HEAD(button_waitq); //定义初始化等待队列头
wake_up_interruptible(&button_waitq); //唤醒 发出
wait_event_interruptible(button_waitq, e...
分类:
系统相关 时间:
2015-05-28 14:11:49
阅读次数:
166
这是一道事件模拟的问题,与前面的排队问题输出业务完成时间不同,本题要求输出每位顾客的等待时间。
我自己没有想到简洁的解决方法,直到看到了sunbaigui的方法。
他的方法核心思路是给每个窗口记录一个时间,代表当前服务的顾客结束的时间,每次取出最早结束服务的窗口,如果等待队列中最前面的顾客到达的时间比这个时间早,说明在等待中,一直要等到服务结束,因此等待时间等于这两个时间的差,此时,窗口的服务结束时间应该被更新为原来的时间(即新顾客开始服务的时间)加上新顾客服务的时间;如果等待队列中最前面的顾客到达时间大于...
分类:
其他好文 时间:
2015-05-27 23:02:15
阅读次数:
290
本博客是笔者在阅读后,有感而写.强烈建议读者去阅读这本书.
要说handler机制,handler并不是猪脚.真正的猪脚是Android异步消息处理现程.
异步消息处理线程:
一般线程在处执行完run()后就会结束.而异步消息处理线程则一个 while(true)循环.不断的从当前线程中取出消息,又不断的处理消息.如果没有消息,就阻塞住,等待队列有新的消息在继续处理....
分类:
移动开发 时间:
2015-05-25 10:02:45
阅读次数:
161
事务multi ... exec 之间的操作先进入等待队列,到exec时一起执行 事物的所有操作结果都是一起返回的,所以前一条指令的结果无法作为后一条指令的参数 其中的指令有语法错误时,都不执行;有“类型不匹配”等逻辑错误时,只执行对的指令;没有回滚 watch 监控一个或多个key 一...
分类:
其他好文 时间:
2015-05-14 13:33:47
阅读次数:
97
Linux系统内核设置优化tcp网络,# vi /etc/sysctl.conf,添加以下内容 net.ipv4.tcp_syncookies = 1 ? 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭...
分类:
系统相关 时间:
2015-05-07 17:11:41
阅读次数:
207
线程饥饿死锁
《Java并发编程实践》中对线程饥饿死锁的解释是这样的:在使用线程池执行任务时,如果任务依赖于其他任务,那么就可能产生死锁问题。在单线程的Executor中,若果一个任务将另一个任务提交到同一个Executor,并且等待这个被提交的任务的结果,那么这必定会导致死锁。第一个任务在工作队列中,并等待第二个任务的结果;而第二个任务则处于等待队列中,等待第一个任务执行完成后被执行...
分类:
编程语言 时间:
2015-04-21 14:40:38
阅读次数:
151
对于select和poll,其主要原理跟epoll不同poll和select的共同点就是,对全部指定设备(fd)都做一次poll,当然这往往都是还没有就绪的,那就会通过回调函数把当前进程注册到设备的等待队列,如果所有设备返回的掩码都没有显示任何的事件触发,就去回调函数的函数指针,进入有限时的睡眠状态...
分类:
其他好文 时间:
2015-04-19 22:43:02
阅读次数:
138