multithreading - Perl 线程和散列键

标签 multithreading perl thread-safety

如果一个哈希在 2 个线程之间共享,并且如果我确保 thread1 仅与 key1 交互,而 thread2 仅与 交互key2,我可以假设它是线程安全的吗?如果是这样,我是否需要创建 key1key2 才能在踏板上共享哈希,或者每个线程都可以创建自己的 key ? 有什么地方可以让我获得有关 Perl 哈希内部机制及其与线程的行为的一些信息?

最佳答案

散列是一个链表数组。散列函数将键转换为数字,该数字用作存储值的数组元素(“桶”)的索引。多个键可以散列到同一索引(“冲突”),因此链表可以处理这种情况。

如果一个线程修改其中一个链表(例如添加一个元素)而另一个线程正在导航它(例如获取一个元素),这可能会导致问题。

因此,添加元素是不安全的。您可以通过预先创建散列(或数组)的元素来解决这个问题。

因此留下了访问现有元素是否安全的问题。可能是,但不能保证。

您可能会发现这些很有趣:

  • illguts进入 Perl 数据结构的内部细节。
  • Devel::Peek是一个非常有用的工具。

关于multithreading - Perl 线程和散列键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573288/

相关文章:

javascript - Mojo::UserAgent 和 JavaScript

批评 : eval "require $module";

c# - .NET 加密类的线程安全性?

java - SplittableRandom.split() 线程安全吗?

c# - 在 ASP.NET 中更新 Dictionary<T,U> 的静态方法 - 在字典本身上锁定()是否安全?

Java 并发实践 “Listing 7.15. Adding reliable cancellation to LogWriter.”。 loggerThread.interrupt() 有什么意义?

java - 发生异常时停止 ThreadPoolTask​​Executor

perl - 为什么 Perl 的 Class::XSAccessor 找不到 Array.so?

c - 关于pthread_cond_wait的用法

c++ - MCS锁实现的问题