作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为这可能是一个相当简单的问题。
我发现了很多使用线程和共享变量的示例,但没有一个示例在线程内部创建共享变量。我想确保我不会做一些似乎可行的事情,并且将来会花一些时间。
我需要这个的原因是我有一个将键映射到数组引用的共享哈希。这些引用由一个线程创建/填充,并由另一个线程读取/修改(假定同步正确)。为了存储这些数组引用,我也必须使其共享。否则我得到错误Invalid value for shared scalar
。
以下是一个示例:
my %hash :shared;
my $t1 = threads->create(
sub { my @ar :shared = (1,2,3); $hash{foo} = \@ar });
$t1->join;
my $t2 = threads->create(
sub { print Dumper(\%hash) });
$t2->join;
cond_wait
/
cond_signal
)通知另一个线程B,对共享哈希中的内容进行处理,并在完成后删除适当的条目。同时,A可以将新的东西添加到哈希中。
[...] Hence most people create all their shared variables before starting any sub-threads.
Therefore even if shared variables can be created in a thread, how useful would it be?
最佳答案
共享变量的原因是共享。因此,您可能希望有多个线程访问该变量。
如果在子线程中创建共享变量,如何在创建共享变量之前停止其他线程对其进行访问?因此,大多数人在启动任何子线程之前创建所有共享变量。
因此,即使可以在线程中创建共享变量,它还有多大用处?
(PS,我不知道perl中是否有任何东西可以阻止在线程中创建共享变量。)
PS一个好的设计将导致很少(如果有)共享变量
关于multithreading - 在线程内创建共享变量可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820242/
我是一名优秀的程序员,十分优秀!