Perl:特殊变量是否安全?

Lou*_*uis 6 concurrency perl multithreading sharing non-deterministic

我正在阅读关于$ @全局变量的一些问题,以及它是如何在它被处理之前被破坏的,因为成功的eval擦拭干净.

但是,如果它被并发线程中发生的错误所破坏呢?新的线程包说默认情况下不会共享内容,这意味着它是为数不多的主流语言之一"$ a = $ a;" 默认是确定性的(并且认为人们说大型项目中C#和Java比Perl更好).但我不确定特殊的全局变量.

我的直觉表明他们就像任何其他变量一样,因此他们不会被分享.我的大脑的本能说'让我们检查一下Stackoverflow上的向导'.

我检查了Perldoc上的线程教程,它涵盖了共享部分中的常规变量,但似乎继续进行而没有覆盖特殊变量.

即使我没有首先对它们进行本地化,我是否可以使用特殊变量而不会被其他线程破坏?例如,我可以从$ @中提取一个值而不必担心并行线程中发生的错误吗?

sal*_*lva 6

你的胆量是正确的,它们不是共享的!

  • @Louis:使用线程局部变量没有任何惩罚.Perl线程的性能问题是创建它们可能非常昂贵.关于锁定外部资源AFAIK,除非你进入XS土地,否则你不需要锁定任何东西. (2认同)