首页 > 试题广场 >

int solve(int x){ &nbs...

[单选题]
int solve(int x) {
    ......
}
int solve2(int y) {
    ......
}
int y;
int main() {
    x++;            //1
    x = solve(x);   //2
    x = solve2(y);  //3
    x = 1;          //4
}
对于上面代码,main函数内注释的1、2、3、4只会同时存在一行,下面说法错误的是()
  • 多线程对x的操作需要同步的包括x++
  • 多线程对x的操作需要同步的包括x=solve(x)
  • 多线程对x的操作需要同步的包括x=solve2(y)
  • 多线程对x的操作需要同步的包括x=1
x=1是一个原子操作
发表于 2020-08-03 22:06:03 回复(0)
原子操作不需要加锁
发表于 2020-11-16 16:05:31 回复(0)
不懂
发表于 2020-12-03 19:34:41 回复(0)
cout++这样的语句转化为汇编语句时,会包含三句指令,所以在你这三句没有完全执行完时,可能就会被打断     原子操作就是再多线程中不会被打断的程序执行片段。x=1是原子操作,原子操作不需要同步
发表于 2023-01-13 09:30:00 回复(0)

原子操作是指一个操作要么完全执行,要么完全不执行,中间不会被中断。在多线程并发的情况下,原子操作可以保证在没有锁的情况下,操作的完整性和一致性。

具体来说,对于多线程环境中的原子操作,它们要么看起来像是在同一时刻执行的,要么就好像根本没有其他线程在执行。这意味着原子操作中的指令不会被线程切换中断,从而确保了操作的完整性。

在C++和Java等语言中,通常会提供原子操作的支持,比如C++11标准引入的atomic模板类,以及Java中的Atomic包等。

因此,x=1这个赋值操作可以被视为原子操作,因为它要么完全执行将x赋值为1,要么完全不执行,不会出现中间状态。

发表于 2023-11-17 09:03:03 回复(0)
这题是什么意思?
发表于 2020-10-24 22:53:27 回复(0)
赋值操作是原子操作,无法被拆分,所以不需要进行上锁
发表于 2022-09-01 23:50:36 回复(0)
恒等于,无需同步
发表于 2022-06-17 10:21:20 回复(0)
x恒等于1,所以多线程不需要同步
发表于 2021-10-22 21:55:52 回复(0)
x哪定义的?
发表于 2021-05-23 12:58:09 回复(0)
x恒等于1,不需要同步
发表于 2022-02-11 11:09:16 回复(0)