原子操作的重要性

原子操作:要么不做,要么一次性做完

非原子操作

原子操作的重要性_第1张图片

 其实ABCD都是对的。

B选项:正常执行,I线程执行2条语句全部执行完毕,再执行II线程重新执行一遍foo函数。

原子操作的重要性_第2张图片

 C选项:先执行I线程foo函数第一行代码,然后跳转执行II线程foo函数,返回后执行foo的后续代码

原子操作的重要性_第3张图片

A选项:I线程中printf函数实际上并不是直接输出,而是把数据放入缓冲区中,因此有可能A线程将打印的2放入缓冲区中,还没来得及输出,这时候B线程打印了3,时间片轮转回来就会后打印2

原子操作的重要性_第4张图片

D选项:a=a+1本身就不是原子操作因此有可能同时进行操作,都向寄存器中加载1进去,然后进行+1后,将2放回内存,因此有可能会打印2和2

 

原子操作的重要性_第5张图片

如果是原子性的操作,就不会有A和D选项正确了!!!

因为,原子性操作的话,a=a+1与printf()必须全部执行完毕才可以被切换到其他进程或线程

你可能感兴趣的:(开发语言,c++,linux)