首页 > 试题广场 >

以下多线程对int型变量x的操作,哪几个不需要进行同步( &

[单选题]
以下多线程对int型变量x的操作,哪几个不需要进行同步(    )
  • x=y;
  • x++;
  • ++x;
  • x=1;
A.由于y的值不确定,所以要加锁;
B,C 两个在多线程情况下是必须要加锁的,因为他们是先被读入寄存器,然后再进行+1操作,如果没有加锁,那么可能会出现数据异常;
D 原子操作,所以不需要加锁
发表于 2019-09-02 09:51:37 回复(0)
没人吐槽那几个然后单选吗?
发表于 2019-10-20 15:45:34 回复(0)
加锁的目的是为了保护数据,如果不需要保护的情况下数据就本身就可以一致,就没有必要加锁
发表于 2019-08-23 20:59:05 回复(0)

原子操作时不需要synchronized,因为这个操作不会因为开启了多线程被其他线程所打断,从而造成在一个线程操作时,会有其他线程对其操作结果产生影响.

比如说CPU A(CPU A上所运行的进程,以下同)从内存单元把当前计数值⑵装载进它的寄存器中;

CPU B从内存单元把当前计数值⑵装载进它的寄存器中。

CPU A在它的寄存器中将计数值递减为1;

CPU B在它的寄存器中将计数值递减为1;

CPU A把修改后的计数值⑴写回内存单元。

CPU B把修改后的计数值⑴写回内存单元

最终我们得到的计数值还是1,这其实已经违背了我们在CPUA上所要运行的结果,所以这就产生了一些线程问题,但是这种情况只能发生在非原子操作,因为线程的插入都是发生在两个机器指令之间,我们进行的赋值操作本质就是一个机器指令,在指令运行期间不能被打断,必须等待指令运行完毕,所以它不存在线程问题,但是运算程序,进行编译之后实际上就是多条指令,因此在指令之间可以插入其他线程对结果产生一些影响.

发表于 2019-10-14 09:15:29 回复(0)