Java Perl共享变量原子性和可见性

Java Perl共享变量原子性和可见性,java,multithreading,perl,visibility,atomicity,Java,Multithreading,Perl,Visibility,Atomicity,这是我从描述中读到的: 默认情况下,变量对每个线程都是私有的,每个新创建的线程都会获得每个现有变量的私有副本。此模块允许您在不同线程之间共享变量 假设我有一个这样的共享变量: my$var:shared; $var=10; 这意味着对于我创建的所有线程,该变量只存在一次 现在,关于原子性和可见性: 如果线程_A分配了一个新值,比如说11: $var=11; 是否保证线程_B(以及我可能创建的所有其他线程)将看到值11? 任务是以原子方式执行的吗 或者我们像Java一样,先获取一个锁,然后进

这是我从描述中读到的:

默认情况下,变量对每个线程都是私有的,每个新创建的线程都会获得每个现有变量的私有副本。此模块允许您在不同线程之间共享变量

假设我有一个这样的共享变量:

my$var:shared;
$var=10;
这意味着对于我创建的所有线程,该变量只存在一次


现在,关于原子性和可见性:

如果线程_A分配了一个新值,比如说11:

$var=11;
是否保证线程_B(以及我可能创建的所有其他线程)将看到值11? 任务是以原子方式执行的吗

或者我们像Java一样,先获取一个锁,然后进行赋值并释放锁。只有使用相同锁的线程才能保证看到更新的值


或者它的行为类似于Java中的易失性原语变量?

在更新中强制原子性始终是一种很好的做法。Perl提供了允许我们这样做的功能。您可以
锁定
变量本身-如果变量与线程共享,那么锁定状态也是如此

如果更新
$var
,则其他线程将看到新值

但是你确实有一个潜在的竞争条件,这取决于他们何时访问它。如果这是一个问题-
锁定
,如果不是。。。继续

请记住,诸如
$var++
之类的操作不能保证是原子操作。()