【发布时间】:2014-11-30 15:53:20
【问题描述】:
这是我从threads::shared 描述中读到的:
默认情况下,变量对每个线程都是私有的,每个新创建的线程都会获得每个现有变量的私有副本。该模块允许您跨不同线程共享变量...(more)
假设我有一个这样的共享变量:
my $var :shared;
$var = 10;
这意味着对于我创建的所有线程,该变量只存在一次。
现在关于原子性和可见性:
如果 thread_A 分配了一个新值,比如说 11:
$var = 11;
是否保证 thread_B(以及我可能创建的所有其他线程)会看到值 11 ? 分配是原子执行的吗?
或者我们是否像在 Java 中一样首先获取锁,然后进行分配并释放锁。并且只有使用相同锁的线程才能保证看到更新的值?
或者这表现得像 Java 中的 volatile 原始变量?
【问题讨论】:
标签: java multithreading perl visibility atomic