- 论坛徽章:
- 0
|
本帖最后由 zsmctfy 于 2011-04-03 17:50 编辑
有这样一段原子操作的代码:(是《Linux设备驱动详解》书上的)
static atomoic xxx_available = ATOMIC_INIT(1);
static int xxx_open (struct inode * inode, struct file * file)
{
....
if( !atomic_dec_and_test( &xxx_available)) {
atomic_inc(&xxx_available);
return -EBUSY;
}
.....
return 0;
}
static int xxx_release(struct inode *inode, struct file *filp)
{
atomic_inc( & xxx_available);
return 0;
}
这里我有点疑问。如果两个进程A和B,它们都调用了这个驱动模块,那么会不会定义两个xxx_available原子变量。如果会,也就是两个进程在使用各自的xxx_available原子变量,那就没有起到互斥的作用,两个进程同时访问同一个设备就会出现故障;如果不会,那xxx_available是定义的static变量,静态的变量,它只能被本文件里的程序代码访问。好像我表达得不是蛮清楚啊!反正就是想问各个进程用的是不是同一个xxx_available原子变量?
希望大家帮我解答一下,我是初学驱动的。 |
|