社区
C++ 语言
帖子详情
锁的机制在底层是怎样实现的?
panpanf1
2008-11-17 03:13:59
如题
...全文
818
16
打赏
收藏
锁的机制在底层是怎样实现的?
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hai040
2008-11-18
打赏
举报
回复
学习
mLee79
2008-11-18
打赏
举报
回复
早些版本的sparc情况不是很清楚, 不过 sparc V8 V9 是有 ldstub , swap , cas 指令做原子操作的... 早期的处理器应该很少拿来做 SMP 的吧, 单处理器下没这些麻烦, 不过不大了解这些情况 ...
linux中的atomic_t类型之所以只影响24个bits偶觉得应该不是因为 sparc 没有原子操作指令, 而是因为 sparc 的自旋锁是用 ldstub 实现的, ldstub 会将 0xff 写入字节,并返回寄存器中的原始值...
WingForce
2008-11-17
打赏
举报
回复
如果没有记错或者是我过去的理解有错的话,linux中的atomic_t类型之所以只影响24个bits就是因为sparc体系不支持原子操作指令。
mLee79
2008-11-17
打赏
举报
回复
很多操作系统都可以关中断的三, 包括 NT 系列大家做 rootkit 也都是关中断的干活三.. 嵌入式系统好像大部分都可以在用户态关中断的 ... 不过这些关中断貌似都可以用一套复杂的同步机制来避免 ...
偶感兴趣的是是否有机器 "没有提供原子操作指令"..
独孤过儿
2008-11-17
打赏
举报
回复
呵呵,我提供一个确定的开关中断的场合吧,在嵌入式的os里面,uC/OS-II是允许开关中断的,它是分别用两个宏
来实现的,叫OS_ENTER_CRITICAL和OS_EXIT_CRITICAL
mLee79
2008-11-17
打赏
举报
回复
基本上内核也只在初始化的时候会关中断, 初始化完成后就很少见关中断的...
那些要关中断跑临界区指令的通常都是些根本没有现代意义操作系统概念的, 像些啥嵌入式的小程序啊, DOS啊虾米的, 没必要实现一套复杂的同步机制 ...
偶倒孤陋寡闻, 还没听说过啥处理器"没有提供原子操作指令", 这东西根本就不需要提供, 基本上只要是单独的一条机器指令本来就是原子的 ...
jieao111
2008-11-17
打赏
举报
回复
关中断确实很少用的。。。关于加锁,把锁变量和严格轮换法结合起来那个算法,叫什么来着,给忘了,,可以参考《操作系统:设计与实现》,,我想信号量也是一种加锁方式把
独孤过儿
2008-11-17
打赏
举报
回复
呵呵,mLee79老大说的是对的。
开关中断只是一种IPC实现的手段,而且这种手段也不是常用的,基本都是在内核态用的,用户态不可能给用。想
象一下,要是把开关中断的权限给了用户程序,一旦有程序关了中断,却忘了重新打开,那后果会怎样...
WingForce
2008-11-17
打赏
举报
回复
好吧,我承认我以偏概全了,在某些没有提供原子操作指令的硬件上,是以开关中断来实现的。。。
mLee79
2008-11-17
打赏
举报
回复
谁告诉你要关中断的, 只要是一条单独的机器指令就是原子的, 在多处理器上需要锁定总线, 也就是加 lock 前缀.
比如 随便实现几个原语, atomic_incl , atomic_decl , atomic_CAS , atomic_CAS2 哪一个需要关中断的 ...
%ifdef _X_UP_
%define _X_LOCK_
%else
%define _X_LOCK_ lock
%endif
@_XPEER2_atomic_incl@4:
mov eax , 1
_X_LOCK_ inc DWORD [ecx+0]
jnz short @inclOK@
xor eax , eax
@inclOK@:
ret
@_XPEER2_atomic_decl@4:
mov eax , 1
_X_LOCK_ dec DWORD [ecx+0]
jnz short @declOK@
xor eax , eax
@declOK@:
ret
@_XPEER2_atomic_CAS@12:
mov eax , [esp+4]
_X_LOCK_ cmpxchg [ecx],edx
mov eax , 1
jz short @CASDone@
xor eax , eax
@CASDone@:
ret 4
@_XPEER2_atomic_CAS2@12:
push ebx
push ebp
mov ebp , ecx
mov ecx , [edx+4]
mov ebx , [edx+0]
mov edx , [esp+12]
mov eax , [edx+0]
mov edx , [edx+4]
_X_LOCK_ cmpxchg8b [ebp]
mov eax , 1
jz short @CAS2Done@
xor eax , eax
@CAS2Done@:
pop ebp
pop ebx
ret 4
WingForce
2008-11-17
打赏
举报
回复
[Quote=引用 5 楼 mLee79 的回复:]
没听说过加锁还要关中断的, 那系统还能跑么, 还不跟蜗牛一样...
计算机硬件保证CPU不会在一条指令执行的过程中发生中断, 如果一个任务可以由一条单一的指令完成, 那它就是原子的, 操作系统实现的锁机制通常都由少量的几个同步原语所构成,比如 lockedIncl , lockedDecl , lockedAdd, lockedExchg, CAS ( Compare-And-Swap ) , CAS2 等 ...
你可以找找 linux 或者 nt 的内核代码看看, 也没啥神秘的 ...
[/Quote]
所谓的同步原语就是先关中断,然后执行几条指令,再开中断
mLee79
2008-11-17
打赏
举报
回复
没听说过加锁还要关中断的, 那系统还能跑么, 还不跟蜗牛一样...
计算机硬件保证CPU不会在一条指令执行的过程中发生中断, 如果一个任务可以由一条单一的指令完成, 那它就是原子的, 操作系统实现的锁机制通常都由少量的几个同步原语所构成,比如 lockedIncl , lockedDecl , lockedAdd, lockedExchg, CAS ( Compare-And-Swap ) , CAS2 等 ...
你可以找找 linux 或者 nt 的内核代码看看, 也没啥神秘的 ...
herman~~
2008-11-17
打赏
举报
回复
学习
toadzw
2008-11-17
打赏
举报
回复
你可以看一下操作系统的部分,这是一个很难的实现,有硬件与软件方法;软件方法在操作系统这本书中有介绍,好像是波兰的科学家实现的;
lonelywinter340
2008-11-17
打赏
举报
回复
加锁就是关中断,解锁就是开中断
进程切换和线程切换其实是由系统的时钟中断引发的,关了中断就不会发生进程或线程切换,起到加锁的作用
WingForce
2008-11-17
打赏
举报
回复
和硬件相关的
一般来说,根本上就是关中断,然后执行一个操作,然后开中断
关了中断,就无法进行任务调度了,所以在关中断到开中断之间的操作是不会被打断的
ReentrantLock公平
锁
与非公平
锁
:深入剖析AQS
底层
实现
机制
本文基于JDK 11源码,详细分析了ReentrantLock中公平
锁
与非公平
锁
的
底层
实现
机制
。通过对AQS结构、
锁
获取流程及性能测试的对比,帮助开发者理解两者的核心差异,并提供实际应用建议。
Java 中 synchronized 的
底层
实现
和
锁
的升降级
机制
是什么?
本文深入探讨Java中synchronized的
底层
实现
,重点分析基于对象头Mark Word的
锁
升级过程,包括偏向
锁
、轻量级
锁
到重量级
锁
的演变
机制
及其性能优化原理,并解释monitor结构与实际验证方法。
synchronized的
底层
实现
原理及
锁
升级
机制
synchronized关键字用于解决多线程并发访问问题,保证并发安全。本文介绍了其基本特性,包括原子性、可见性、有序性和重入性;阐述了方法同步和代码块同步的
实现
原理;还讲解了
锁
升级
机制
,从无
锁
到偏向
锁
、轻量级
锁
,最终到重量级
锁
,以及monitor
机制
、内存屏障和同步原语。
JDK中lock
锁
的
机制
,其
底层
是一种无
锁
的架构
实现
的,公平
锁
和非公平
锁
本文详细解析了JDK中的synchronized与Lock接口,特别是ReentrantLock的
实现
,包括公平
锁
和非公平
锁
的区别,以及tryLock、unlock和acquire方法的工作原理。
Java并发
机制
底层
实现
-
锁
升级
本文解析了Java中的
锁
升级、无
锁
、偏向
锁
、轻量级
锁
和重量级
锁
的工作原理,详细阐述了它们在多线程环境中的应用过程和优化策略。重点讲解了偏向
锁
如何在无竞争情况下高效工作,以及轻量级
锁
的自旋与膨胀
机制
。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章