首页 > 代码库 > 原子访问
原子访问
线程同步一大部分与原子访问(atomic access)有关, 所谓原子访问, 指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源.
假设编译器将g_x递增的那行代码时,生成了下面的汇编代码:
MOV EAX, [g_x] ; Move the value in g_x into a register
INC EAX ; Increment the value in the register
MOV [g_x] , EAX; Store the new value back in g_x
两个线程不太可能在完全相同的时刻执行上面的代码. 但如果是下面这样呢?
MOV EAX, [g_x] ; thread1: move 0 into a register
INC EAX ; thread1: Increment the register to 1
MOV EAX, [g_x] ; thread2: Move 0 into a register
INC EAX ; thread2: Increment the register to 1
MOV [g_x], EAX ; thread2: Store 1 back in g_x
MOV [g_x] , EAX ; thread 1 : Store 1 back in g_x.
结果显而易见,这是不正确的,多个线程访问同一资源的方式.
为了解决这个问题,需要一种方法能够保证对一个值的递增操作是原子操作---就是说,不会被打断,Interlocked系列函数为我们提供了这种解决方案,所有这些函数会以原子方式操作一个值.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。