gpt4 book ai didi

java - Perl 共享变量的原子性和可见性

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:10 25 4
gpt4 key购买 nike

这是我从 threads::shared 上读到的描述:

By default, variables are private to each thread, and each newly created thread gets a private copy of each existing variable. This module allows you to share variables across different threads ... (more)

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

my $var :shared;
$var = 10;

这意味着对于我创建的所有线程,该变量只存在一次。


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

如果 thread_A 分配了一个新值,比如说 11:

$var = 11;

是否保证 thread_B(以及我可能创建的所有其他线程)将看到值 11?分配是原子执行的吗?

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

或者它的行为类似于 Java 中的 volatile 原始变量?

最佳答案

在更新中强制执行原子性始终是一个好习惯。 Perl 提供 lock允许我们这样做。您可以锁定 变量本身 - 如果变量与线程共享,那么锁定状态也是如此。

如果您更新 $var,那么其他线程将看到新值。

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

请记住,$var++ 等操作不能保证是原子的。 ( http://perldoc.perl.org/perlthrtut.html#Thread-Pitfalls%3a-Races )

关于java - Perl 共享变量的原子性和可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26215371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com