首页 > 试题广场 >

请你说说互斥锁和自旋锁

[问答题]
请你说说互斥锁和自旋锁
自旋锁与互斥锁使用层面比较相似,但实现层面上完全不同:当加锁失败时,互斥锁用「线程切换」来应对,自旋锁则用「忙等待」来应对。 它俩是锁的最基本处理方式,更高级的锁都会选择其中一个来实现,比如读写锁既可以选择互斥锁实现,也可以基于自旋锁实现。
发表于 2022-04-11 09:50:37 回复(0)
互斥锁拿不到锁会释放cpu 自旋锁会占着cpu一直等
发表于 2022-08-20 13:26:53 回复(0)
互斥锁:共享资源只允许一个进程进行访问,进程没有请求到锁后,会继续进行其它事,当锁被释放后,再来申请 自旋锁:进程没有请求到锁后,会原地等待,知道锁被释放
发表于 2022-06-28 10:16:29 回复(0)
互斥锁在获取不到锁的时候将线程挂起,本质是一个获取锁的系统调用,从用户区切换到内核区,系统调用失败线程休眠。自旋锁获取不到锁的时候进入忙等待,不会主动切换线程,程序始终运行在用户区
发表于 2022-07-05 21:03:00 回复(0)
互斥锁拿不到锁会释放CPU,自旋锁拿不到锁也会一直占着CPU
发表于 2024-04-28 16:07:05 回复(0)
互斥锁和自旋锁都是用于实现对共享资源互斥访问的锁机制,在访问资源之前必须获得锁,没得到锁则阻塞,而互斥锁和自旋锁的不同在与没获得锁之后如何反映, 互斥锁:当一个线程获得锁失败时,内核将线程睡眠,并自动释放CPU,此时他将等待锁空闲后的某个时间被唤醒,当其他线程用完数据并释放互斥锁时,将唤醒其他等待所得线程,获得锁后,则正常访问,期间有两次上下文开销。如果你锁住的代码执⾏时间⽐较短,那可能上下⽂切换的时间都⽐你锁住的代码执⾏时间还要⻓,此时应该使用自旋锁。 自旋锁:当一个线程获得锁失败后,程序将忙等,直到获取锁,在单核CPU中要使用抢占式调度器,否则可能导致使用自旋锁的线程一直占用CPU,如果被锁住的代码执⾏时间过⻓,⾃旋的线程会⻓时间占⽤ CPU 资源
编辑于 2024-04-17 09:18:07 回复(0)
互斥锁是阻塞的,在不能立即获得锁的时候阻塞不会占用cpu资源;自旋锁一般非阻塞,在能获取锁的时候能较快响应,但是是通过轮询的方式所以占用cpu资源
编辑于 2024-03-21 15:41:47 回复(0)
互斥锁在没有请求到锁会释放锁进入阻塞状态,自旋锁在没有请求到时,会一直判断等待,一直占用cpu来判断
编辑于 2024-03-03 13:45:05 回复(0)
互斥锁在尝试加锁失败后线程会阻塞在这里,释放CPU,直到锁被释放后再来申请 自旋锁在尝试加锁失败后线程会阻塞在这里,但是一直占用着CPU,一直尝试加锁
编辑于 2024-03-01 14:06:44 回复(0)
1. 互斥锁和自旋锁都可以用于保护临界资源,不过它们有一些不同应用场景,互斥锁加锁失败时,线程会释放cpu,而自旋锁是选择忙等待,因此,当临界区代码执行时间很短时,采用自旋锁是更好的选择,线程忙等待一会后就获取到了锁,避免了线程的切换,因为线程的切换的开销可能要比忙等待这一会的开销还要大。
发表于 2023-10-22 20:38:04 回复(0)
互斥锁:互斥锁是用于实现进程或线程间同步的机制,当一个线程得到互斥锁并访问共享资源时,其他访问该资源的线程将被阻塞,直到锁被释放。与互斥锁不同的是,当一个线程尝试获得自旋锁时,如果锁已经被其他线程所占有,那么该线程不会阻塞,而是不断循环检查锁是否可用。
发表于 2023-09-21 20:05:19 回复(0)
互斥锁:共享资源只允许一个进程进行访问,进程没有请求到锁后,会继续进行其它事,当锁被释放后,再来申请 自旋锁:进程没有请求到锁后,会原地等待阻塞状态,知道锁被释放
发表于 2023-07-25 16:15:01 回复(0)
互斥锁是通过加锁和解锁保护临界区,当一个线程获取该锁,其他线程则进入阻塞状态,必须等待该线程释放锁才能获取锁。 自旋锁是一个线程获取了自旋锁,其他线程无法获取自旋锁时,进入一种忙等待状态,直到锁被释放才能获取
发表于 2023-07-10 17:00:57 回复(0)
互斥锁:最常用的一种,当遇到数据注入时,互斥锁可以有效的保护数据的有序性。 自旋锁:个人不常用,遇到自旋锁会堵塞进程,等待资源释放,然后再继续运行。
发表于 2023-06-15 08:59:38 回复(0)
互斥锁原理: 互斥锁也称为互斥量,它具有加锁和解锁两种状态,当一个线程对一个临界资源进行加锁之后,其他的线程就无法访问该临界资源,互斥锁内部有一个互斥锁等待队列,用来保存等待的线程,只有解锁之后才能由等待队列里的某个线程来访问这个临界资源并加锁。 自旋锁原理: 当线程获取锁之前它一直在等待阻塞状态,一直占用cpu直到获取锁
发表于 2023-06-13 19:16:19 回复(0)
自旋锁优点:不会引起调用者睡眠。缺点:CPU效率降低。
发表于 2023-03-22 10:51:54 回复(0)
加锁失败 互斥锁再申请锁失败的时候线程会休眠 不消耗cpu 自旋锁 会不停的扫描查看是否可用会消耗cpu 应用场景不通 自旋锁用于 等待时间段的情况
发表于 2022-05-18 15:55:17 回复(0)