赞
踩
并发:一个CPU在一个时间片只能执行一个任务,切换速度很快。
并行:双核CPU,真正的同时执行两个任务
并行就是并发的理想情况,统称并发。
1.中断中修改公共资源
2.抢占式并发访问:正在执行的进程随时可能被抢占
3.多核处理器并发访问
保护共享资源
全局变量、驱动设备结构体、共享数据....
原子操作是一个最小单位的执行操作,在执行完前不可以被任何操作打断
用于保护一个整型单位或者位。
- static atomic64_t v = ATOMIC_INIT(1); //定义一个原子变量v,初值为1
-
- static int cdev_open(struct inode *inode, struct file *filp)
- {
- /*****************************************/
- file->private_data = &dev1; //指向设备结构体
- return 0;
- }
-
- static int cdev_open(struct inode *inode, struct file *filp)
- {
- if( !atomic64_dec_and_test(&v)){ // -1
- atomic64_inc(&v); // +1
- return -EBUSY; //返回错误
- }
-
- file->private_data = &dev1; //指向设备结构体
- return 0;
- }
分析:
假如A进入驱动函数,v的值为1,v-1为0,v = 返回1,取反等于0,不满足要求,则执行下面的私有数据。
A在使用OPEN函数,此时B进入驱动函数,v的值为0,返回值为0,取反为1,进入if函数,返回EBUSY错误指令。
- int main(int argc, char *argv[])
- {
- int fd1;
- char buf1[32] = "ni hao test1!";
-
- fd1 = open("/dev/test1", HELLO); /* 打开设备节点1 */
- sleep(5); /* 延时5秒,为了实验效果*/
- close(fd1);
-
- return 0;
- }
生成a.out ,复制一个为b.out
执行a.out后马上执行b.out返回error,因为a.out中有五秒延时占用程序。
过五秒后执行b.out即执行正常。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。