首页 > 试题广场 >

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

[不定项选择题]
以下多线程对 int 型变量x的操作,哪几个需要进行同步:

  • x=y
  • x++
  • ++x
  • x=1
ABC
A:在X86上它包含两个操作:读取y至寄存器,再把该值写入x。读y的值这个操作本身是原子的,把值写入x也是原子的,但是两者合起来不是原子操作,因为它不是不可再分的操作,所以需要进行同步
B、C:x++和++x这样的操作在多线程环境下是需要同步的。因为X86会按三条指令的形式来处理这种语句:从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x 所处的内存地址
D:x=1是原子操作,不可再分
发表于 2015-06-29 20:41:55 回复(0)
答案是 ABC
这个题只要看操作受不受多线程的影响,是否加锁
A,因为y的初值不确定,所以要加锁
B和C却需要执行2步操作,所以也需要加锁
只有D的结果不受多线程影响
所以选ABC
发表于 2015-06-29 12:50:53 回复(0)
ABC
思路:参见博客:http://blog.chinaunix.net/uid-669974-id-304287.html ,博主用汇编看了下,ABC都是写简单数据类型,并且操作的结果与初值有关.所以需要加锁
发表于 2015-01-20 11:00:24 回复(0)