问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请解释为什么自旋锁不适用于单处理器系统中,而是往往使用于多处理器系统中

发布网友 发布时间:2022-04-11 15:51

我来回答

2个回答

热心网友 时间:2022-04-11 17:21

  自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。

  在单处理机环境中可以使用硬件提供的swap指令或test_and_set指令实现进程互斥,(Swap指令:交换两个内存单元的内容;test_and_set指令取出内存某一单元(位)的值,然后再给该单元(位)赋一个新值,关于为何这两条指令能实现互斥我们不在赘述,读者可以了解其算法) 这些指令涉及对同一存储单元的两次或两次以上操作,这些操作将在几个指令周期内完成,但由于中断只能发生在两条机器指令之间,而同一指令内的多个指令周期不可中断,从而保证swap指令或test_and_set指令的执行不会交叉进行.
  但在多处理机环境中情况有所不同,例如test_and_set指令包括“取”、“送”两个指令周期,两个CPU执行test_and_set(lock)可能发生指令周期上的交叉,假如lock初始为0, CPU1和CPU2可能分别执行完前一个指令周期并通过检测(均为0),然后分别执行后一个指令周期将lock设置为1,结果都取回0作为判断临界区空闲的依据,从而不能实现互斥. 如图4-3所示.
  为在多CPU环境中利用test_and_set指令实现进程互斥,硬件需要提供进一步的支持,以保证test_and_set指令执行的原子性. 这种支持目前多以“锁总线”(bus locking)的形式提供的,由于test_and_set指令对内存的两次操作都需要经过总线,在执行test_and_set指令之前锁住总线,在执行test_and_set指令后开放总线,即可保证test_and_set指令执行的原子性
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么鉴别匡威真假鉴别鉴别匡威真假的方法与技巧 洛阳小碗汤怎么做 酥肉丸子汤如何烹饪简单而又不失美味? 直通车产出比多少不亏?产出比低怎么调整? 淘宝直通车投产比多少才是盈利?怎么提升? 车打不着拧钥匙没反应 车打火的钥匙拧不动 微信关闭时后台还在图标上还有个小锁什么意思 坦克世界闪击战电脑需求配置玩坦克世界电脑配置要达到什么标准_百度... 坦克世界对电脑配置要求高不高玩坦克世界电脑需要什么配置要求 坦克世界对电脑的配置要求是多少坦克世界配置要求 Linux中自旋锁是什么? 自旋锁的基本形式 自旋锁的介绍 EXCEL求统计A列非空且不重复,同时满足B列=1,C列=有货,的个数。要公式谢谢 怎么更新自增列的值 MySQL数据库定时任务,在一个表中,每1小时定时删除每个用户较早的数据,只保留最新的10条记录 sql server2008如何让一个字段只保存年份比如2008 求SQL语句???数据库一张表有很多数据,只保留三条记录(按修改时间),删除掉最旧的的文件记录,谢谢 如何让数据库始终只保留3天记录 求方法:c#备份sqlserver2000的数据库中最近N天的数据 sql server中有一个表,其中相同id对应许多行,如何取相同id中的前三行数据? case when能和开窗函数一起用吗 mysql 数据库怎么查询sql server 数据库中的数据,求详解??? 关于SQL Server 2000中的索引的问题? 请问在SQL SERVER 中创建了索引后怎么利用索引查找数据,还是说在查找时系统自动调用索引查询? 关于SQL server 2005的索引问题 sql server 表扫描和索引扫描的区别? SQL SERVER 索引异常导致查询效率异常 sql server索引问题求助 SQL SERVER中什么情况会导致索引查找变成索 一个SQLSERVER中的问题 Linux中自旋锁原理是? 以下关于自旋锁的说法中,哪一个是错误的 SqlServer2008R2 插入数据超时 vb连接数据库sqlserver的问题 MsSQLServer是如何加密口令的 如何开启sqlserver ted 加密 不制作证书是否能加密SQLSERVER与客户端之间传输的数据 SQLServer数据库 SQLSERVER将表中一列明文密码导入到另外一列并MD5加密 sqlserver 加密特定字段,用windows集成身份才能看到明文,也就是要数据库本机才能看到。 对mssql里的数据库进行加密, 别人能附加但不能查看数据库的表,存储过程等内容 SQL Server怎么设置表的权限. win 7 安装 sql server 2000 后不能在企业管理器中创建表 在sql sever 中怎么用语句给予用户建表的权限 SQL Server 2000如何禁止用户查看其他数据库列表和可登录用户的列表 如何设置sql server 2000,使其在客户端修改或新建表,在服务器端数据不变 sql server 如何设置禁止对某一个表增,删,修改。听说触发器可以,具体代码是什么? SQLServer远程连接失败怎么办 SQL Server 行远程连接失败