zoukankan      html  css  js  c++  java
  • 原子访问

    线程同步一大部分与原子访问(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系列函数为我们提供了这种解决方案,所有这些函数会以原子方式操作一个值.
     
  • 相关阅读:
    第三个冲刺周期第1天
    第二个冲刺周期第7天
    第二个冲刺周期第6天
    第二个冲刺周期第5天
    电梯调度系统最终版
    电梯调度系统迟真真&冯小兰
    软件工程之课程评价czz
    《代码大全2》读后感czz
    迟真真假如历史可以重来
    十天冲刺任务迟真真
  • 原文地址:https://www.cnblogs.com/xiejiulong/p/3924739.html
Copyright © 2011-2022 走看看