作业帮 > 综合 > 作业

Synchronize

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/18 22:44:52
Synchronize
什么作用
Synchronize
为什么不能?很多书上都说的很清楚.比如一个很简单的例子,有一个整数,int i = 5;
现在有2个线程对它做计算操作,比如都是乘6吧.编译起最后生成的代码可能是这样的:
1 mov ax,i
2 mul 6
3 mov i,ax
如果2个线程依次执行,显然最后的结果应该是180,但是线程是同时执行的.那么可能是,一个线程执行1、2步骤,在执行第3个步骤之前,另一个线程执行第一步骤,然后是第一个线程将计算结果放回i,这时i时30.然后第二个线程开始将已经取出的值进行计算,这个值已经存放在ax里面了(因为操作系统会对寄存器进行保存恢复,所以该值在线程切换过程中不会丢失),计算的结果仍然是30,依旧放回去.这样就变成经过了2次计算,结果仍然是30,不是我们预期的结果.
造成这种结果的原因是,有些操作不是原子操作,也就是在CPU指令级别是可以分解的,这样会影响程序的执行结果.使用Synchronize函数就能够保证该函数调用的函数是不可重入的,这样可以防止造成冲突
帮你找的~来自csdn