wait_queue_head_twrite_queue;//定义写等待队列头部
structsemaphoresem;//定义信号量,用于互斥访问公共资源
sta(ti)cssize_tmem_read(structle*lp,char__user*b
uf,size_tsize,lo_t*ppos)
{
if(down_interrupTIble(//使用 down_interrupTIble,给公共
资源上(锁),以防出现并发引起的竞态问题
while(!have_data)//have_data 用来判断缓冲区中是否有数
据,如果有数据,直接跳过该 while 语句,执行下面的//
copy_to_user
{
up(//由于没有数据,不能进行读取数据操作,要释放锁,解锁,
这里的解锁很重要,要是没有解锁,很容//易进入死锁,具体怎样,
下面再分析
if(lp->f_'ags//由于是非阻塞打开,直接返回
wait_event_interrupTIble(read_queue,have_date);//阻塞
方式代开,该语句会让进程进入休眠状态,然后等待其他进程//的
评论0
最新资源