关闭

单核、多核上锁、同步操作、原子操作

标签: 多核原子操作Test-and-Set锁内存总线内存屏障
470人阅读 评论(0) 收藏 举报
分类:

(1)      所有的同步操作最基础的理论就是原子操作,内存屏障、锁都是为了保证在不同平台或者cpu下的原子操作。

内存屏障作用:

A:在编译时,拒绝编译器优化之后的指令

B:在运行时,告诉内存地址总线,共享数据地址必须同步

 

锁是内存中一种整型数据,只有两种状态:空闲和上锁。

加锁过程

1、  read lock

2、  判断lock状态

3、  如果已经加锁,返回失败

4、  把锁状态设置为上锁

5、  返回成功

 

(2)      什么情况下会导致不同线程同时得到锁:

1、  中断,上面1到5步骤中出现中断,cpu被抢占

2、  多核,可以同步在不同核心上处理1到5步骤

 

(3)      解决办法

1:单核情况下,可以先关闭中断,加锁后再打开中断。Test-and-Set就是用来做这个事情的。Test-and-Set主要功能,取出内存某一单元的值。还有swap用来交换两个内存单元的值。这两个命令都是原子性的。

2:单核情况下Test-and-Set不会被中断打断所以是原子性的,对于多核来说Test-and-Set就不再是原子性的了。对于多核可以在锁内存总线的情况下进行Test-and-Set。原子操作里面的lock是锁内存总线,这里面的lock是保证执行的执行顺序严格按照lock前,lock中,lock后的顺序执行

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1256次
    • 积分:90
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档