1. 互斥锁的基本概念
在前面的信号量章节,我们也了解过互斥这个概念,就是当不同进程/线程去访问某个临界资源的时候,就需要进行互斥保护, 这种互斥保护可以看做是一种锁机制,就好比当你去上厕所的时候,你会锁住门,不让别人进来。 在Linux系统中的锁机制是一个比较广泛的概念,而且锁的种类很多,包括互斥锁,文件锁,读写锁等等。
其实信号量也是一种锁,可以使用锁的目的是达到互斥的作用,使得共享资源在同一时间内, 只有能有一个进程或者线程对它进行操作。
整个系统拥有很多临界资源,比如某些全局性的文件,硬件接口等, 但整个Linux系统可以完美运行,这无不依赖锁机制,可以说锁机制是Linux整个系统的精髓所在, Linux内核都是围绕着同步在运转,它决定了进程/线程什么时候可以访问这个临界资源,在多进程和多线程编程中, 锁起着极其重要的作用。信号量也可以作为锁使用,但是我们今天要讲解的是POSIX标准中的机制——互斥锁(mutex)。 一些资料中会将互斥锁称为互斥量,它们是一样的。
互斥锁和信号量不同的是,它具有互斥锁所有权、递归访问等特性,常用于实现对临界资源的独占式处理, 在任意时刻互斥锁的状态只有两种,开锁或闭锁。
当互斥锁被线程持有时,该互斥锁处于闭锁状态,线程获得互斥锁的所有权。当该线程释放互斥锁时, 该互斥锁处于开锁状态,线程失去该互斥锁的所有权。
也就是说,同时只有一个线程能获取互斥锁,特别地,持有该互斥锁的线程能够再次获得这个锁而不被阻塞, 这就是互斥锁的递归访问,递归互斥锁会跟踪锁的持有者线程以及锁定次数(引用计数):当同一线程再次请求该锁时,递增计数而非阻塞;当线程解锁时,递减计数,直到计数为零时实际释放锁。这个特性
订阅专栏 解锁全文
663

被折叠的 条评论
为什么被折叠?



