当前位置:首页 » 密码管理 » 互斥访问

互斥访问

发布时间: 2023-08-12 13:54:24

❶ Linux系统中对临界资源进行互斥访问的手段是

自旋锁(Spin Lock)是一种典型的对临界资源进行互斥访问的手段,其名称来源于它的工作方式。为了获得一个自旋锁,在某CPU上运行的代码需先执行一个原子操作,该操作测试并设置(Test-AndSet)某个内存变量。由于它是原子操作,所以在该操作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行;如果测试结果表明锁仍被占用,程序将在一个小的循环内重复这个“测试并设置”操作,即进行所谓的“自旋”,通俗地说就是“在原地打转”。当自旋锁的持有者通过重置该变量释放这个自旋锁后,某个等待的“测试并设置”操作向其调用者报告锁已释放。理解自旋锁最简单的方法是把它作为一个变量看待,该变量把一个临界区标记为“我当前在运行,请稍等一会”或者标记为“我当前不在运行,可以被使用。如果A执行单元首先进入例程,它将持有自旋锁;当B执行单元试图进入同一个例程时,将获知自旋锁已被持有,需等到A执行单元释放后才能进入。在ARM体系结构下,自旋锁的实现借用了ldrex指令、strex指令、ARM处理器内存屏障指令dmb和dsb、wfe指令和sev指令,这类似于代码清单7.1的逻辑。可以说既要保证排他性,也要处理好内存屏障。

自旋锁主要针对SMP或单CPU但内核可抢占的情况,对于单CPU和内核不支持抢占的系统,自旋锁退化为空操作。在单CPU和内核可抢占的系统中,自旋锁持有期间中内核的抢占将被禁止。由于内核可抢占的单CPU系统的行为实际上很类似于SMP系统,因此,在这样的单CPU系统中使用自旋锁仍十分必要。另外,在多核SMP的情况下,任何一个核拿到了自旋锁,该核上的抢占调度也暂时禁止了,但是没有禁止另外一个核的抢占调度。尽管用了自旋锁可以保证临界区不受别的CPU和本CPU内的抢占进程打扰,但是得到锁的代码路径在执行临界区的时候,还可能受到中断和底半部的影响。为了防止这种影响,就需要用到自旋锁的衍生。

热点内容
国家开放大学默认密码是多少 发布:2025-08-14 17:46:04 浏览:459
sql拼接sql 发布:2025-08-14 17:46:01 浏览:146
c语言实现的万年历 发布:2025-08-14 17:37:58 浏览:949
我的世界网易服务器老是崩溃怎么办 发布:2025-08-14 17:32:50 浏览:150
小米路由存储分享 发布:2025-08-14 17:32:48 浏览:246
a3服务器ip地址连接不了 发布:2025-08-14 17:19:58 浏览:810
mac查看系统文件夹 发布:2025-08-14 17:17:56 浏览:342
代码段加密 发布:2025-08-14 17:06:30 浏览:959
我的世界嗨皮服务器怎么关服了 发布:2025-08-14 16:48:55 浏览:420
怎么可以修改手机配置 发布:2025-08-14 16:44:09 浏览:311