1 临界区指的是访问和操作共享数据的代码段。多线程访问同一个资源是不安全的,因此要避免在临界区中并发访问,做到这点就需要把整个临界区的代码的原子性(不可发生上下文切换,不可打断执行)
2 如果发生了不同的线程同时想要执行临界区代码,就会产生竞争。避免并发和防止竞争条件成为同步。
3 同步的方法有加锁。加锁保证消除并发的重要一点就是,锁本身是一个原子操作。
4 造成并发的原因:
中断
软中断和tasklet
内核抢占
睡眠及与用户空间的同步
对称多处理
5 防止并发本身并不难,直接加锁就能搞定。难在如何发现需要加锁的数据,提前预防。
6 一条好的建议:如果其他执行线程可以访问这些数据,那么就给这些数据加上各种形式的锁;如果任何其他什么东西能看到它,那么就锁住他。记住,要给数据而不是代码加锁。
7 如何预防死锁
按顺序加锁,按顺序获取锁,以相反的顺序释放锁
防止发生饥饿
不要重复请求同一个锁
设计力求简单
8 锁的争用:是指锁正在被占用,有其他线程试图获得该锁。由于锁的作用是使程序以串行方式对资源的访问,所以使用锁无疑会降低系统的性能。被高度争用的锁会成为系统的瓶颈,严重降低系统性能。解决办法就是将锁的粒度变小,更为精细。
网友评论