2016 - 2024

感恩一路有你

脚本语言有哪些 自旋锁的自旋锁-原理?

浏览量:2802 时间:2021-03-12 19:54:59 作者:admin

自旋锁的自旋锁-原理?

自旋锁

自旋锁类似于互斥锁,只是自旋锁不会导致调用者睡眠。如果一个自旋锁被另一个执行单元持有,调用者总是在那里循环,看它是否被持有

自旋锁的持有者是否已经释放了锁,因此得名“self spin”。它的功能是解决资源的互斥使用问题。由于自旋锁不会导致调用者睡眠,所以自旋锁的效率比互斥锁高很多。虽然它的效率高于互斥锁,但它也有一些缺点:1。自旋锁总是占用CPU。它运行所有的时间-自旋没有得到锁,所以它占用CPU。如果不能在短时间内获得锁,无疑会降低CPU效率。

2. 使用自旋锁时,可能会导致死锁。递归调用时,可能导致死锁。调用其他一些函数也可能导致死锁,例如copyuutouuser()、copyufromuuser()、kmalloc()等,因此使用自旋锁要谨慎。只有当内核是抢占式或SMP时,才真正需要自旋锁。在单CPU非抢占式内核中,自旋锁的操作为空。旋转锁适用于锁用户在短时间内保持锁。

互斥:线程将切换上下文,抢占CPU并将信号从休眠发送到运行。

自旋锁:线程总是在运行(lock> unlock),死循环检测锁标志位,机制并不复杂。

互斥锁是一种睡眠等待锁。例如,在双核机器上,有两个线程(线程a和线程b),分别在core0和

core1上运行。假设线程a要通过pthreadmutexLock操作来获得关键区域的锁,此时锁被线程B持有,那么线程a将被阻塞

在X86平台上,自旋锁主要通过处理器的锁指令前缀来实现。当一个线程的指令访问内存时,另一个线程的指令不能访问内存。因此,在spinlock的初始化阶段,lock变量中的值K被分配给1。锁定时,使用lock decl(x)指令将变量更改为互斥的0,并询问结果0是否分配给EFLAGS寄存器的相应位。只有锁定的线程会导致0,而其他线程不会。然后,通过判断相应的位来判断是否加锁。否则,循环将执行lock decl(x),直到添加它为止。其中x是变量的地址。这是GCC的at&t语法的汇编。

spinlock自旋锁是如何实现的?

粒子的自旋与物体的自转和地球的自转是不同的物理机制,这在量子力学教科书中已经明确提到了很长一段时间。

首先,宏观物体的旋转,比如地球的旋转,是角动量守恒的背后。物理学中有一个非常强大的定理,它是由一位名叫诺特的女数学家证明的,因此被称为诺特定理。诺特定理告诉我们,在连续对称性的背后,必然有一个相应的守恒定律。物理学家把这个定理应用到我们的时空中,从空间平移对称性得到动量守恒,从时间平移对称性得到能量守恒。与空间旋转相对应的对称性,即“自由实体”在没有外力的情况下会旋转而不能停止。这种对称性背后的相应定律是角动量守恒定律。

事实上,许多中国物理学家认为“自旋”这个名字不合适,他们更喜欢用英文名“自旋”,因为“自旋”听起来像粒子在旋转。如果你认为自旋是粒子的经典旋转,那就违反了相对论。这是因为你可以计算电子的自旋线速度。计算过程如下:

答案超过光速,这与狭义相对论相矛盾。

脚本语言有哪些 cas自旋锁原理 互斥锁的实现原理

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。