提问者:小点点

代码的“副作用”到底是什么意思?


以下引用摘自本教程。

我无法理解该段的最后一行(我已对其应用了粗体字体)。代码的副作用是什么意思?

原子动作不能交错,因此可以使用它们而不用担心线程干扰。然而,这并不能消除所有同步原子动作的需要,因为内存一致性错误仍然是可能的。使用易失性变量降低了内存一致性错误的风险,因为对易失性变量的任何写入都与该变量的后续读取建立了先发生关系。这意味着对易失性变量的更改始终对其他线程可见。更重要的是,这还意味着当线程读取易失性变量时,它不仅会看到对易失性的最新更改,还会看到导致更改的代码的副作用。


共2个答案

匿名用户

这里的“副作用”意味着线程在其自己的堆栈之外更新某些内存位置。基本上,这意味着它改变了堆上某个对象的状态。

确保正确发布易失性字段的同步机制也会导致(作为副作用,hihi)对其他线程在更新该字段之前所做的任何内存写入的相同保证。

匿名用户

副作用只是指某种状态的改变——例如:

  • 更改变量的值;
  • 将一些数据写入磁盘;
  • 在用户界面中启用或禁用按钮。

所以在最后一行中,线程会看到由代码的副作用引起的任何状态变化,而不仅仅是被读取的易失性变量的副作用。