内核同步(死锁等,基础)
来源:互联网 发布:求几本好看网络黄书 编辑:程序博客网 时间:2024/05/16 18:15
内核同步(基础)
在访问共享数据的时候必须使用要留意保护共享资源,防止共享资源并发访问。如果发生并发多个线程就可能会交替的修改或者覆盖内存中的数据,而且这种错误不易调试,因为我们并不能确定到底什么时候会发生并发,但是真的有可能发生这种令人恶心的问题。
临界区:
就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,必须使用原子操作或者锁来保证不要并发。
造成并发的原因:
用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度。如果发生了抢占,然后两个进程还都是需要同一个共享数据段,此时竞争条件便产生了。然后就出事了。
同样的内核中有类似可能造成并发执行的原因:
中断:中断几乎可以在任何时刻异步发生,当然可能打断正在执行的代码然后竞争条件产生
软中断和tasklet: 内核可以在任何时刻唤醒或者调度软中断和tasklet,打断正在执行的代码
内核抢占:因为内核具有抢占性,所以内核中的任务可能会被另一任务抢占。
睡眠与用户空间的同步:在内核执行的进程中可能会睡眠,这就会唤醒调度程序,从而导致调度一个新的用户进程执行。
对称多处理器,两个或者多个处理器同时执行代码。
死锁:
是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 。典型的四路交通问题如果大家都等待其中一个方向的汽车移动那么,整个交通都不可以移动,永远等待下去。
还需要注意的是:
我们用了很大时间精力是为了保护什么?我们是为了保护数据而不是保护代码。
- 内核同步(死锁等,基础)
- Oracle基础(九):数据备份与恢复、死锁等
- java 多线程详解(多线程的创建、同步思想、死锁等)
- 同步锁、互锁(死锁)
- java基础(死锁)
- 内核中各种同步机制(自旋锁大内核锁顺序锁等)
- 死锁---同步
- [windows][thread] 同步.内核.Mutex.Semaphores等
- java+oracle+web(第八天) java 基础课程(一) 线程同步和死锁
- Linux内核同步机制之(七):RCU基础
- Java基础第十一天学习日记_线程、同步、死锁
- 黑马程序员-JAVA基础-多线程的安全、同步与死锁
- [黑马程序员]6 JAVA基础-多线程 死锁 同步
- JAVA基础 day11 多线程 同步代码块 死锁问题
- Linux内核源码系列(二):探究内核基础层数据结构,同步机制的应用
- 内核同步(笔记)
- 操作系统(6)同步、通信与死锁
- iOS 多线程+死锁(同步函数底层)
- mongo基本命令
- Wince 获取电源通知
- Swift版Facebook POP
- GRE考试高分作文的开头与结尾
- iOS不规则按钮实现
- 内核同步(死锁等,基础)
- [倚天屠龙记] vim 查找与替换(高级)
- Android初学习 - 以代码方式(非XML)创建一个布局
- c++ 实现结构体单链表的 创建 插入 删除等操作
- Linux GCC 编译 指令------- -c -o
- Android中通过intent启动另一个应用
- Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题
- R语言画图——par()参数介绍
- nginx1.9+tomcat配置