列表

详情


18. 请你说说互斥锁和自旋锁

回答思路

标准回答 1. 互斥锁 互斥锁也称为互斥量(Mutex),是一种用来保护临界区的特殊变量, 它可以处于锁定(locked) 状态, 也可以处于解锁(unlocked) 状态: - 如果互斥锁是锁定的, 就是某个特定的线程正持有这个互斥锁 - 如果没有线程持有这个互斥锁,那么这个互斥锁就处于解锁状态 每个互斥锁内部有一个线程等待队列,用来保存等待该互斥锁的线程。当互斥锁处于解锁状态时, 如果某个线程试图获取这个互斥锁, 那么这个线程就可以得到这个互斥锁而不会阻塞;当互斥锁处于锁定状态时, 如果某个线程试图获取这个互斥锁, 那么这个线程将阻塞在互斥锁的等待队列内。 2. 自旋锁 自旋锁与互斥锁类似,但它不是通过休眠使进程阻塞,而是在获取锁之前一直处于忙等(自旋)阻塞状态。自旋锁可以用于以下情况:锁被持有的时间短,而且线程并不希望在重新调度上花费太多的成本。 自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图获得一个已经被持有的自旋锁,那么该线程就会一直进行忙循环 - 旋转 - 等待锁重新可用。

上一题