第十一章 Linux驱动程序中的 并发控制
并发(concurrency)指的是多个执行单元同时、并行被执行。而并发的执行单元对共享资 源〈如硬件资摞、程序中的全局变量、静态变量等〉的访问很容易导致竞态条件( race conditions)。
自旋锁并不关心锁定的|临界区究竟是怎样的操作,不管是读还是写,都只允许同时只有一个执 行单元可以极取自旋锁, 即使有多个单元同时读取临界区资源也会被锁住。实际上,对于并发访问 共享资源时,多个执行单元同时读取它是不会有任何问题的。为了解决这个问题,自旋锁衍生出了读写自旋锁。也就是将临界区的读、写操作分开。如果开发人员认为临界区的代码只是读取了共享资源,并未对共享资源做任何修改,那么就可以使用读自旋锁,多个执行单元可以同时获取一个读自旋锁。
使用读写自旋锁的方式和普通的自旋锁类似,也需要通过定义读写自旋锁变量,初始化读写自旋锁变量飞获取读自旋锁或写自旋锁、释放读自旋锁或写面旋锁。
顺序锁与读写自旋锁类似,只是为写锁贼予了更高的权限。在读写自旋锁中,读锁和写锁的优先级是相同的。当读锁获取读自旋锁时,写锁必须等待,直到临界区的代码执行完成,并释放读自旋锁为止,反之亦然。 而顺序锁在获取读锁的时候,仍然可以款取写锁,并继续执行写临界区中的代码。也就是说,写锁永远不会被读锁阻塞。
http://www.cnblogs.com/yangsasa/
时间: 2024-10-13 07:11:24