内核同步

来源:互联网 发布:淘宝洗照片用什么相纸 编辑:程序博客网 时间:2024/06/14 13:15

内核同步
共享内存的应用程序必须留意保护共享资源,防止共享资源被并发的访问。并发访问共享数据是造成系统不稳定的一类隐患。
临界区:访问和操作共享数据的代码段。
避免并发和防止竞争条件称为同步,就是访问和操作共享资源是原子执行的。两个原子指令交错发生不可能。这就出现了锁机制:要明白什么造成了并发执行,再针对性的保护相应的临近资源。
锁机制会造成死锁,每个线程都在等待其中一个资源,但是所有的资源都已经被占用,即所有的线程相互等待。这就是死锁
还有就是自死锁,自己递归的申请自己已经拥有的锁。
锁的争用:当锁被占用时,其他线程试图获得该锁。锁就是处于高度争用转台,指有多个其他线程在等待该锁。锁的作用是程序以串行的方式访问资源,所以会降低系统的性能。可以增加锁的粒度
内核同步方法
linux内核提供了相当完备的同步方法。
原子操作可以保证指令以原子的方式执行(执行过程不会被打断)。内核提供了两组原子操作的接口,一组对整数进行操作,一组对单独的位进行操作。

  1. linux中常见的锁是自旋锁。如果一个执行线程试图获得一个被争用的自旋锁,该进程就会一直进行忙等待(旋转)。 如果自旋锁长时间被持有,会特别浪费处理器时间。可以让请求线程睡眠,直到锁重新可用时再唤醒它。一般,持有自旋锁的
    时间最好小于两次上下文切换的耗时。
  2. linux中信号量是一种睡眠锁。如果有一个任务试图获得一个已经被占用的信号量时,信号量会将它加入一个等待队列然后让其睡眠 但是睡眠,维护等待队列以及唤醒所花费的开销可能比锁占用的全部时间还要长。
    占用信号量的线程不能再占用自旋锁,等待信号量可以睡眠,但是持有自旋锁的线程不能睡眠,信号量不同于自旋锁,他不会禁止 内核抢占。
0 0
原创粉丝点击