我从
默认情况下,变量对于每个线程都是私有的,并且每个新创建的线程都会获得每个现有变量的私有副本。此模块允许您在不同的线程之间共享变量...(更多) 假设我有一个这样的共享变量:
这意味着这个变量只存在于我创建的所有线程中一次。
现在讲解原子性和可见性:
如果线程A分配了一个新值,比如11:
threads::shared
的描述中了解到:默认情况下,变量对于每个线程都是私有的,并且每个新创建的线程都会获得每个现有变量的私有副本。此模块允许您在不同的线程之间共享变量...(更多) 假设我有一个这样的共享变量:
my $var :shared;
$var = 10;
这意味着这个变量只存在于我创建的所有线程中一次。
现在讲解原子性和可见性:
如果线程A分配了一个新值,比如11:
$var = 11;
线程B(以及其他可能已创建的线程)能否保证看到值为11?这个赋值操作是原子性的吗?
还是像Java一样需要先获取锁,然后进行赋值操作并释放锁,只有使用相同锁的线程才能保证看到更新后的值?
或者这就像Java中的易失性原语变量?