日期:2014-05-16  浏览次数:20853 次

多线程访问驱动
多线程程序里对同一个IO驱动访问是否需要互斥?一个简单的IO驱动程序,控制不同的IO输出,在多线程里随机访问它,是否需要加上互斥保护?为什么?指点一下

------解决方案--------------------
1,一般驱动是否可以在多线程中并发访问?
当然可以,不过要加互斥
2,如果驱动不涉及中断是否可以不做互斥保护?
不可以,是否有中断和是否互斥保护没有关系。多线程访问一个公共资源的时候就必须要互斥保护,防止相互干扰。
3,若做互斥保护一般是在应用层做互斥还是在驱动(内核层)做互斥?
都需要。
------解决方案--------------------
驱动是必须做互斥处理的, 防止进程间的并发访问。应用程序一般为了防止线程间的并发竞争,也是需要的,当然不是必须的。最简单的例子就是printf,你在调用的时候并不需要加互斥保护的。
------解决方案--------------------
引用:
Quote: 引用:

驱动是必须做互斥处理的, 防止进程间的并发访问。应用程序一般为了防止线程间的并发竞争,也是需要的,当然不是必须的。最简单的例子就是printf,你在调用的时候并不需要加互斥保护的。
如果驱动做了互斥而线程不做有可能会造成死锁?


你是想说驱动互斥而应用不做有可能造成死锁吧?
不会的,你没明白我刚才的意思。
应用程序调用printf打印字符到console的时候一般是不加锁的对吧,那是因为console下面的设备驱动是加锁或者互斥的。所以下面驱动加锁或者互斥就可以保证你都个应用程序调用printf的时候不会把程序B打印的字符打印到程序A显示的字符当中去。
至于是否造成死锁,这是你驱动程序的设计问题,如果设计不好当然会死锁。